0

我知道我们可以使用以下命令运行后台进程:

exec("doTask.php $arg1 $arg2 $arg3 >/dev/null 2>&1 &");

(取自:异步运行 PHP 任务

但是我有一个脚本,它取决于第一次执行的状态。例子:

mongoexport ... | awk ... > my.csv && zip myzip my.csv

CSV 文件必须存在才能压缩。
更新:文件名和一些查询条件是用户提交的值。

所以我有类似的东西:

exec("mongoexport ... | awk ... > my.csv && zip myzip my.csv > /dev/null 2>&1 &);

但这不起作用。PHP 挂在那里等待脚本完成运行。

我试过了

exec("mongoexport ... | awk ... > my.csv &);

这样可行。

那么&&它不在后台运行的原因是什么?
如何使示例在后台运行?

4

1 回答 1

1

以下将起作用

exec("(mongoexport ... | awk ... > my.csv && zip myzip my.csv) > /dev/null 2>&1 &")

它告诉外壳程序在后台进程中运行大括号中的所有命令序列并重定向输出,因此该exec函数无需等待。

在您的示例中,从中启动的 shellexec等待awk完成,然后zip在后台运行(如果 awk 以状态 0 退出)

于 2013-05-06T10:47:53.253 回答