在ssh结束后继续执行程序

时间:2015-07-31 15:32:12

标签: linux ssh

我有一个运行带有1000个不同参数的可执行文件的脚本(每次执行一个)。这可能需要数小时。我在实验室计算机上运行它。现在,我通过ssh从家用电脑上做到这一点。我可以执行ssh,开始执行脚本,注销,但不知何故允许脚本继续执行吗?

我的意思是实验室电脑仍然是开放的,我不关心程序的标准。有趣的结果将写入一个文件,我可以在我再次登录时检查。

我试图这样做,但是一旦我退出,脚本就会停止执行。

2 个答案:

答案 0 :(得分:6)

由于我无法将问题标记为this的副本,因为"重复的问题必须存在于Stack Overflow"因为我想分享我的经验,我会回答我自己的问题。

tmuxscreen是副本中的最佳答案。但是,第一个在我的Debian中可能没有被识别(可能需要安装),而后者已经准备好了,并且工作正常,对于这个简单的场景:

  • ssh进入你的遥控盒。输入screen然后开始您想要的流程。

  • Ctrl - A 然后 Ctrl - D 。这将"分离"您的屏幕会话,但让您的进程保持运行。您现在可以退出远程控制台。

  • 如果您想稍后返回,请再次登录并输入screen -r这将"恢复"你的屏幕会话,你可以看到你的过程的输出。

此评论似乎也很好:"我通常会使用screen -S name命名我的屏幕会话,以便以后更容易连接到正确的屏幕会话。 "

正如deviantfan所说," tmux需要安装。一个简单的apt-get install tmux作为root就足够了。"。

答案 1 :(得分:1)

我假设你尝试的时候,用myscript &将它放在后台,然后注销。一些GNU / Linux发行版默认发送SIGHUP给会话tty作为其tty的所有进程(或者从登录会话中查找进程的其他方式,如父PID的树,我忘了。)< / p>

所以,解决方案是:

nohup myscript &

真的那么容易。在nohup下运行时,您处理将忽略挂断信号。 nohup从/ dev / null重定向stdin,如果它来自终端,stdout / stderr重定向到nohup.out。然后阅读nohup.out,它将在您调用脚本的目录中创建。

tmux非常好,而且我一直都在使用它,但实际上并不需要它。 (我实际上使用的是屏幕,但这仅仅是因为当我开始使用屏幕时tmux不存在,并且切换会产生一些重新学习的开销。)