我通过 ssh 登录到远程服务器并启动了一个 php 脚本。显然,这需要 17 个小时才能完成,有没有办法断开连接但保持脚本执行?我没有进行任何输出重定向,所以我看到了所有输出。
4 回答
您可以立即停止该过程吗?如果是这样,启动screen,启动进程并使用 ctrl-a 然后 ctrl-d 分离屏幕。稍后使用 screen -r 检索会话。
这应该在大多数发行版中都可用,否则,肯定会为您提供一个包。
ctrl + z
将暂停它。比类型
bg
将其发送到后台。记下进程的 PID 以供以后使用;)
编辑:我忘了,你必须执行
disown -$PID
其中 $PID 是您的进程的 pid
之后,关闭终端后该进程不会被终止。
您描述了保护脚本连续性很重要。不幸的是,我不知道,您与脚本进行任何交互,而脚本是由您制作的。
- 延续保护“屏幕”命令。你的连接会中断,但是屏幕保护伪终端,你可以稍后重新连接,看人。
如果您不需要操作员与脚本交互,您只需在开始时将脚本置于后台,并将完整的输出记录到日志文件中。只需使用命令:
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
当前目录中的文件。
您可以使用screen
.