如何将ssh作业发送到后台

时间:2011-11-18 15:23:18

标签: bash ssh io-redirection

我通过ssh登录到远程服务器并启动了一个php脚本。最重要的是,它需要17个小时才能完成,有没有办法打破连接但是保持脚本执行?我没有进行任何输出重定向,所以我看到了所有输出。

4 个答案:

答案 0 :(得分:8)

你现在可以停止这个过程吗?如果是这样,启动screen,使用ctrl-a然后按ctrl-d启动进程并分离屏幕。使用screen -r稍后检索会话。

这应该可以在大多数发行版中找到,如果没有,那么肯定会有一个包。

答案 1 :(得分:8)

ctrl + z 

会暂停它。比类型

bg

将其发送到后台。记下流程的PID以供以后使用;)

编辑:我忘记了,你必须执行

disown -$PID

其中$ PID是您的流程的pid

之后,关闭终端后不会终止进程。

答案 2 :(得分:1)

您描述了保护脚本延续非常重要。不幸的是我不知道,你与脚本和脚本进行任何交互是由你做的。

  1. 继续保护'screen'命令。你的连接会中断,但屏幕保护伪终端,你可以稍后再重新连接,见man。
  2. 如果您不需要操作员与脚本交互,您只需在开始时将脚本放到后台,并将完整输出记录到日志文件中。只需使用命令:

    nohup /where/is/your.script.php >output.log 2&>1 &
    

    > output.log 会将输出重定向到日志文件中, 2&> 1 会将错误流附加到输出中,有效地将其附加到日志文件中。最后& 会将命令放入后台。注意,nohup命令会从终端组中分离进程。

    现在您可以安全地退出ssh shell。因为您的脚本不在终端组中,所以它不会被杀死。它将从您的shell进程重新加入到系统INIT进程中。它像系统行为一样是unix。您可以使用命令

    监控完整输出
    tail -f output.log   #allways breakable by ^C, it is only watching
    

    使用此方法,您不需要使用^ Z,bg等shell技巧将命令放到后台。

  3. 注意,首选使用重定向到nohup命令。否则nohup会自动将所有输出重定向到当前目录中的nohup.out文件。

答案 3 :(得分:0)

您可以使用screen