【问题标题】:can I ssh to Windows, start a command and let it run even when I log out?我可以通过 ssh 连接到 Windows,启动一个命令并让它在我注销时运行吗?
【发布时间】:2020-03-23 04:18:51
【问题描述】:

现在 Windows 10 包含一个 openSSH 服务器,有什么方法可以启动程序并让它在我注销时运行? 在 linux 上,有 screen 和 tmux,但是 Windows 呢?

注意事项:

  • 能够重新附加到进程会很好,但不是必需的
  • 在当前本地用户的会话中打开程序也是可以的

我的用例是在我自己的机器上从其他地方运行脚本 - 由于某些脚本可能需要几个小时才能完成,所以我不想依赖于保持 SSH 处于打开状态。 (并且由于测试将结果写入文件,因此可以“触发并忘记”,即无法重新附加。)

我尝试使用 SysInternals 中的 PsExec 作为 psexec -i 1 start cmd.exe /k "command" 在当前用户的会话中启动命令,但是使用 PsExec could not start start on <hastname>: The system cannot find the file specified. 失败...并且没有 start 它不会从 ssh 会话中分离。

【问题讨论】:

    标签: windows ssh


    【解决方案1】:

    经过一番阅读,似乎有两种方法可以运行与当前会话分离的内容:将其作为服务运行,或使用调度程序。 事实证明,后者相对简单,并且可以在 SSH 会话中正常工作:

    schtasks /create /SC ONCE /TN <task_name> /TR <full-path-to-script> /ST <HH:MM>
    

    将安排任务在指定时间运行。

    一些注意事项:

    • 脚本运行后仍会保留在计划任务列表中,只是没有指定时间。
    • 可以立即运行计划任务,但这不会删除计划时间,即它也会在 HH:MM 运行。
    • 脚本以C:\WINDOWS\system32 作为工作目录执行。
      • 如果是 .bat 文件,可以使用pushd %~dp0 进入脚本目录(与cd 不同,pushd 也适用于该目录在另一个驱动器上)
    • 脚本将在当前会话的命令行窗口中运行。

    要立即运行某项而不将其留在计划任务列表中,可以使用以下命令:

    schtasks /create /SC ONCE /TN <task_name> /TR <full-path-to-script> /ST <HH:MM>
    schtasks /run /TN <task_name>
    schtasks /delete /TN <task_name> /F
    

    请注意,最后一行不会停止正在运行的任务,只是将其从调度程序中移除。

    在此之后,可以安全地注销 ssh 会话,脚本将继续运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      • 2021-07-09
      • 1970-01-01
      相关资源
      最近更新 更多