现在 Windows 10 包含了 openSSH 服务器,是否有某种方法可以启动程序并让它在我注销时运行?
在 Linux 上,有 screen 和 tmux,但是 Windows 上呢?
Notes:
- 能够重新附加到进程会很好,但这不是必需的
- 在当前本地用户的会话中打开程序也可以
我的用例是从其他地方在我自己的计算机上运行脚本 - 由于某些脚本可能需要几个小时才能完成,因此我不想依赖于保持 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 会话分离。
经过一番阅读后,看起来有两种方法可以运行与当前会话分离的东西:将其作为服务运行,或使用调度程序。
事实证明,后者相对简单,并且在 SSH 会话中工作得很好:
schtasks /create /SC ONCE /TN <task_name> /TR <full-path-to-script> /ST <HH:MM>
将安排任务在指定时间运行。
一些注意事项:
- 即使脚本运行后,它也会保留在计划任务列表中,只是没有指定时间。
- 可以立即运行计划任务,但这确实not删除预定时间,即它也将在 HH:MM 运行。
- The script is executed with
C:\WINDOWS\system32
as a working directory.
- 如果是.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
请注意,最后一行确实not停止正在运行的任务,只是将其从调度程序中删除。
此后,您可以安全地注销 ssh 会话,并且脚本将继续运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)