运行 php 在后台执行命令

running php exec command in background

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

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

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

示例:

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

nohup 表示当终端 运行ning 命令关闭时,我们不发送 "hang up" 信号(这会终止进程)。

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

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