在后台运行php exec命令

时间:2015-07-06 20:07:04

标签: php exec

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

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

然而它永远不会发动战争。如果我只是使用:

exec('sar -u 1')

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

1 个答案:

答案 0 :(得分:2)

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

示例:

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

nohup 表示我们不发送&#34;挂断&#34;当运行命令的终端关闭时,信号(杀死进程)。

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

另外请注意,如果您使用PHP 只是来调用shell命令,那么您可能需要考虑其他选项,例如Ubuntu's Upstart而没有PHP组件 - 如果您使用的是Ubuntu那是。