我有一个远程 Linux 服务器,我用它通过 SSH 运行一些非常长的任务。它工作得很好,但是,当然,如果连接由于某种原因中断,任务就会终止。
具体来说,我正在运行这样的东西:
[myName@localStation]$ ssh john_doe@myRemoteServer
Password: *****
[john_doe@remoteServer]$ ./myVeryLongTask.script > myOutputLog.txt
有没有办法调整 SSH 连接,以便在网络连接失败时任务继续运行?
答案1
您需要阅读屏幕命令(这是谷歌的快速结果)
Screen 允许您保持远程连接运行并根据您所描述的原因返回该连接。它对于运行无人值守的作业或无限期地保持会话打开也很有用。
“男人屏幕”了解更多信息
编辑:这是一个更好的 HOWTO 链接:screen: 即使连接断开也能保持进程运行
答案2
screen
确实很棒。另外两个选项是at
和nohup
:
at
at, - 排队、检查或删除作业以供以后执行
您可以使用
at
的交互式 shell 启动命令或将它们保存在文本文件中并将其传递到 at:$ cat foo ./myVeryLongTask.script > myOutputLog.txt $ at now < foo
nohup
nohup - 运行不受挂起影响的命令,并将输出输出到非 tty
要启动命令,请执行以下操作
$nohup ./myVeryLongTask.script > myOutputLog.txt
答案3
为了完整起见,分离是另一种选择。detach
上面链接中的摘要:
dtach 是一个模拟屏幕分离功能的小程序,允许您在不受控制终端保护的环境中运行程序并稍后附加到它。
与 相比,它的尺寸更小,并且比或screen
具有更多的功能。at
nohup