【问题标题】:running php exec command in background在后台运行 php exec 命令
【发布时间】:2015-07-06 20:07:04
【问题描述】:

我正在尝试启动 sar 并通过 php 脚本让它永远运行。但无论出于何种原因,它从未真正启动过。我尝试了以下方法:

exec('sar -u 1 > /home/foo/foo.txt &');
exec('sar -o /home/foo/foo -u 1 > /dev/null 2>&1 &');  

但是它从不启动 sar。如果我只是使用:

exec('sar -u 1')

它可以工作,但它只是挂起 php 脚本。我的理解是,如果一个程序是用 exec 函数启动的,为了让它继续在后台运行,程序的输出必须重定向到一个文件或另一个输出流。

【问题讨论】:

  • 如果您希望它永远运行,为什么要使用 PHP 脚本启动它?
  • 它是星号 agi 脚本的一部分,它执行 php 脚本来启动它。然后在一系列事件之后调用另一个 php 脚本来停止它。在上述情况下,虽然它永远不会真正启动和运行。

标签: php exec


【解决方案1】:

我假设您在 *nix 平台上运行它。要让 php 在后台运行某些东西而不是等待进程完成,我会推荐 2 件事:首先使用 nohup 并将命令的输出重定向到 /dev/null(垃圾)。

例子:

<?php
exec('nohup sar -u 1 > /dev/null 2>/dev/null &');

nohup 表示当运行命令的终端关闭时,我们不会发送“挂起”信号(这会杀死进程)。

&gt; /dev/null 2&gt;/dev/null &amp; redirects the "normal" and "error" outputs 到黑洞/dev/null 位置。这使得 PHP 不必等待被调用的命令的输出。

另一方面,如果您使用 PHP just 来调用 shell 命令,您可能需要考虑其他选项,例如没有 PHP 组件的 Ubuntu's Upstart——如果您使用的是 Ubuntu,即.

【讨论】:

  • 好吧,如果我只用 PHP 运行它就可以了。谢谢。那么一定是星号脚本执行的问题。
猜你喜欢
  • 1970-01-01
  • 2020-10-04
  • 1970-01-01
  • 2019-02-18
  • 2015-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多