我正在尝试启动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函数启动的,为了让它继续在后台运行,程序的输出必须重定向到一个文件或另一个输出流。
答案 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那是。