9

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

4

4 回答 4

9

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

这应该在大多数发行版中都可用,否则,肯定会为您提供一个包。

于 2011-11-18T15:24:34.930 回答
8
ctrl + z 

将暂停它。比类型

bg

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

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

disown -$PID

其中 $PID 是您的进程的 pid

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

于 2011-11-18T15:25:05.907 回答
2

您描述了保护脚本连续性很重要。不幸的是,我不知道,您与脚本进行任何交互,而脚本是由您制作的。

  1. 延续保护“屏幕”命令。你的连接会中断,但是屏幕保护伪终端,你可以稍后重新连接,看人。
  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 技巧将命令置于后台。

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

于 2013-08-23T07:39:44.470 回答
0

您可以使用screen.

于 2011-11-18T15:25:33.903 回答