【发布时间】:2012-01-01 08:27:45
【问题描述】:
我通过 ssh 登录到远程服务器并启动了一个 php 脚本。显然,这需要 17 个小时才能完成,有没有办法断开连接但保持脚本执行?我没有进行任何输出重定向,所以我看到了所有输出。
【问题讨论】:
-
您不必停止该过程。您可以暂停它并将其发送到后台。你也不需要安装额外的包。
标签: bash ssh io-redirection
我通过 ssh 登录到远程服务器并启动了一个 php 脚本。显然,这需要 17 个小时才能完成,有没有办法断开连接但保持脚本执行?我没有进行任何输出重定向,所以我看到了所有输出。
【问题讨论】:
标签: bash ssh io-redirection
您描述了保护脚本连续性很重要。不幸的是,我不知道,您与脚本进行任何交互,脚本是您制作的。
如果您不需要操作员与脚本交互,您只需在开始时将脚本置于后台,并将完整的输出记录到日志文件中。只需使用命令:
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 文件。
【讨论】:
ctrl + z
将暂停它。比输入
bg
将其发送到后台。记下进程的PID,以备后用;)
编辑:我忘了,你必须执行
disown -$PID
$PID 是你的进程的 pid
之后,关闭终端后进程不会被杀死。
【讨论】:
screen
您可以使用screen。
【讨论】:
你现在可以停止这个过程吗?如果是这样,启动screen,启动进程并使用 ctrl-a 然后 ctrl-d 分离屏幕。稍后使用 screen -r 检索会话。
这应该在大多数发行版中都可用,否则,肯定会为您提供一个包。
【讨论】: