【问题标题】:nohup process stops running a few minutes after terminal closednohup 进程在终端关闭后几分钟停止运行
【发布时间】:2019-07-17 08:34:44
【问题描述】:

我希望一个程序(用 php 编写)即使在我注销后也能在远程服务器上运行。该程序非常简单:除了休眠 10 秒(只是为了测试)什么都不做,如下所示:

function index() 
{
    while(true)
    {
        sleep(10);
    }
}

所以我通过 SSH 连接到远程服务器。然后像这样启动程序:

  nohup php -f index.php &

我希望它在我注销后在服务器的后台运行。但是我发现每次关闭终端后程序只能运行大约10分钟然后停止,尽管终端关闭后它不会立即停止。如果我不关闭终端,它可以永远运行(如预期的那样)。谁能告诉我是什么原因?以及如何解决问题?我也尝试过按照这篇文章中的建议使用“disown”,但遇到了同样的问题:How to make a programme continue to run after log out from ssh? 顺便说一句,我使用的是共享远程主机,所以这可能是由于某些服务器设置造成的,但这很奇怪,因为它在终端打开的情况下工作正常。

【问题讨论】:

    标签: php ssh server nohup


    【解决方案1】:

    您可以尝试在您的nohup 命令之后使用disown

    如果仍然不起作用,请考虑改用screen。它是一个有用的实用程序,允许“虚拟终端”运行,即使在注销后也是如此。

    1. 使用screen -dmS someName 创建一个屏幕。 (例如screen -dmS myPhpScript
    2. 使用screen -r进入您的屏幕,您的窗口将被清除。
    3. 执行你的命令(php -f index.php,没有&!)
    4. 退出屏幕,按 [Ctrl]+[A](似乎什么也没做),然后按 [D]。屏幕将保持在后台。您将返回到上一个提示(就在第 2 步之前),并显示一条消息,指示 [detached from XXXXX.someName]
    5. 您可以使用screen -rscreen -x someName 返回屏幕。

    【讨论】:

    • 谢谢。但我不清楚第2步和第3步。在第2步中,我应该在后台运行命令(即在末尾附加&)?在第 3 步中,按“Ctrl + A”后它什么也不做,然后我按“D”仍然什么也不做。我做错什么了吗?请记住,我通过 SSH 连接到服务器。
    • @TaoHu 哎呀!我忘记了一步。我编辑了我的帖子。另外,不要再使用“&”! Here is a GIF 以备不时之需! (“[detached from yourPhp]”出现在 [Ctrl]+[A] 和 [D] 之后)
    • 嗨,HeySora,我试过你的方法,这个过程可以在它被杀死之前工作更长时间。我终于弄清楚它是被服务器杀死的。我正在使用 A2hosting(共享主机),它不允许在后台运行无人值守的进程。因此,即使屏幕进程也会在注销后的一段时间内被杀死。还是谢谢。
    【解决方案2】:

    原来是服务器问题。 A2hosting 不允许进程在其共享主机的后台运行。因此,该进程将在注销后一段时间(不是立即)被终止。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-06
      • 2019-10-08
      相关资源
      最近更新 更多