windows - 我可以通过 ssh 连接到 Windows,启动命令并让它在我注销时运行吗?

标签 windows ssh

现在 Windows 10 包含了 openSSH 服务器,是否有某种方法可以启动程序并让它在我注销时运行? 在 Linux 上,有 screen 和 tmux,但是 Windows 上呢?

注释:

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

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

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

最佳答案

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

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

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

一些注意事项:

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

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

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 session ,并且脚本将继续运行。

关于windows - 我可以通过 ssh 连接到 Windows,启动命令并让它在我注销时运行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59073083/

相关文章:

c++ - 互斥/多线程/共享资源问题 WinAPI

c++ - scons 找不到 visual studio

windows - Cocoa 是 Windows 中 Win32 API 或 MFC 的 Mac 等价物吗?

C# SSH 到服务器 A 和 SFTP 上传到服务器 B(使用 SSH.NET)

php - 无法杀死 PHP 脚本

ssh - 网络鸭错误 "Login Failed"

javascript - yarn 在 Windows 上慢 5 倍

c++ - 如何在 Windows NT 驱动程序中获取符号链接(symbolic link)名称?

git - 对同一主机使用多个 ssh key ,而不使用别名

java - 方法 rxExecuteBlocking 消耗所有结果 - ssh 客户端