我通过ssh登录到远程服务器并启动了一个php脚本。最重要的是,它需要17个小时才能完成,有没有办法打破连接但是保持脚本执行?我没有进行任何输出重定向,所以我看到了所有输出。
答案 0 :(得分:8)
你现在可以停止这个过程吗?如果是这样,启动screen,使用ctrl-a然后按ctrl-d启动进程并分离屏幕。使用screen -r稍后检索会话。
这应该可以在大多数发行版中找到,如果没有,那么肯定会有一个包。
答案 1 :(得分:8)
ctrl + z
会暂停它。比类型
bg
将其发送到后台。记下流程的PID以供以后使用;)
编辑:我忘记了,你必须执行disown -$PID
其中$ PID是您的流程的pid
之后,关闭终端后不会终止进程。
答案 2 :(得分:1)
您描述了保护脚本延续非常重要。不幸的是我不知道,你与脚本和脚本进行任何交互是由你做的。
如果您不需要操作员与脚本交互,您只需在开始时将脚本放到后台,并将完整输出记录到日志文件中。只需使用命令:
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技巧将命令放到后台。
注意,首选使用重定向到nohup命令。否则nohup会自动将所有输出重定向到当前目录中的nohup.out
文件。
答案 3 :(得分:0)
您可以使用screen
。