现在 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
转到脚本目录(与cd
、pushd
不同)当目录位于另一个驱动器上时也有效)
- 如果是 .bat 文件,可以使用
- 该脚本将在当前 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/