【问题标题】:PHP CLI process not terminating when donePHP CLI 进程在完成后未终止
【发布时间】:2011-10-12 04:19:39
【问题描述】:

我在一个 PHP 文件中有这个:

echo shell_exec('nohup /usr/bin/php -f '.CRON_DIRECTORY.'testjob.php > /dev/null 2>&1 &');

在 testjob.php 我有:

file_put_contents('test.txt',time()); exit;

这一切都只是花花公子。但是,如果我去进程它不会在运行后终止 testjob.php。

【问题讨论】:

  • 当你在没有 nohup 的情况下从命令行运行它时会这样做吗?
  • 尝试在顶部添加:ini_set("log_errors","1"); ini_set("error_log","Errors..txt"); --and -f 是可选的
  • 您怎么会期望脚本终止得那么快?也许是该脚本的设计使它不时运行更长的时间? nohup 会注意它不会停止即使 shell_exec 的外壳已经关闭。看起来您实际上打算在这里在它运行时终止它。

标签: php process command-line-interface


【解决方案1】:

(必须将其发布为答案而不是作为 stackoverflow 的评论仍然不会让我发布 cmets...)

为我工作。我完全按照描述制作了 testjob.php,另一个文件 test.php 只包含给定的行(除了我删除了 CRON_DIRECTORY,因为 testjob.php 对我来说在同一个目录中)。

为了确保我测量正确,我在 testjob.php 的顶部添加了“sleep(5)”,在另一个窗口中我有:

watch 'ps a |grep php'

正在运行。发生这种情况:

  1. 我运行 test.php
  2. test.php 立即退出,但 testjob.php 出现在我的列表中
  3. 5 秒后消失。

我想知道 shell 是否重要,所以我从 bash 切换到了 sh。结果一样。

我还想知道是否可能是因为您的外部脚本运行时间很长。所以我把“sleep(10)”放在test.php的底部。结果相同(即 testjob.php 5 秒后完成,test.php 5 秒后完成)。

因此,毫无帮助的是,您的问题出在您发布的代码之外。

【讨论】:

  • 我昨天做了同样的事情,它也对我有用。认为这是值得的答案。我认为脚本 OP 调用中存在一个小故障,这使得它不时地永无止境。
【解决方案2】:

从命令末尾删除&。这个符号表示nohup 继续在后台运行,因此shell_exec 正在等待任务完成......等待......等待......直到时间结束;)

我什至不明白你为什么要用nohup 执行这个命令。

echo shell_exec('/usr/bin/php -f '.CRON_DIRECTORY.'testjob.php > /dev/null 2>&1');

应该够了。

【讨论】:

  • 我希望它在后台运行,但我希望它在运行完成后结束
  • 我的测试脚本还在手边,所以我只是尝试删除 nohup 和最后的 &。现在 test.php 挂起,直到 testjob.php 完成。只放回 nohup 并没有帮助。只输入 & 就可以了(testjob.php 独立于 test.php)。结论:需要最后的&符号; nohup 可能是可选的,但没有害处。
  • 好的。然后执行以下操作:在它之后执行您的 shell_execexit;die();。脚本仍应运行。您可以通过命令ps auwx | grep php 来检查它是否正在运行。或者您可以检查它是否按您的计划影响了您的数据。
【解决方案3】:

您正在执行 PHP 并将该执行设置为后台任务。这意味着它将在后台运行直到完成。 shell_exec 不会杀死该进程或类似的东西。

您可能想要设置执行限制PHP cli has a setting of unlimited by default。也见set_time_limit PHP Manual;

所以如果你想知道为什么 php 进程没有终止,你需要调试脚本。如果这太复杂并且您无法找出脚本运行这么长时间的原因,您可能只想在一段时间后终止该过程,例如1 分钟。

【讨论】:

    猜你喜欢
    • 2011-04-14
    • 2020-02-26
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 2015-04-14
    • 2011-12-22
    • 2021-01-17
    • 2018-03-25
    相关资源
    最近更新 更多