PHP exec背景永远不会完成

时间:2013-12-18 09:02:38

标签: php bash background

我想在php中处理我的访问日志 - 检查一些IP,这些IP是内容等等,PHP中的所有内容,以CLI运行。我试图跟随,但它永远不会传递exec tail -f,所以,实际上我无法处理数据。任何帮助表示赞赏。

$log = '/var/log/lighttpd/web.org-access.log';
$pipefile = '/www/web.org/tmp/fifo.tmp';

if(file_exists($pipefile))
    if(!unlink($pipefile)) 
        die('unable to remove stale file');

umask(0);
if(!posix_mkfifo($pipefile,0777))
    die('unable to create named pipe');

exec("tail -f $log > $pipefile 2>&1 &"); //I tried nohup and so on...
//exec("varnishncsa $log > $pipefile 2>&1 &"); //will be here instead tail -f
echo "never comes here"; //never shows up

如果可能的话,我想在PHP中做,没有bash / tcsh脚本(我知道如何使用它们)。

感谢。

1 个答案:

答案 0 :(得分:2)

如果您希望exec启动后台处理,则必须重定向其输出。

手册中的引用:

  

如果使用此功能启动程序,为了使其在后台继续运行,必须将程序的输出重定向到文件或其他输出流。如果不这样做将导致PHP挂起,直到程序执行结束。

请注意完整的语法说明:

string exec ( string $command [, array &$output [, int &$return_var ]] )

来源:http://www.php.net/manual/en/function.exec.php