【发布时间】:2013-05-06 09:30:37
【问题描述】:
我知道我们可以使用以下命令运行后台进程:
exec("doTask.php $arg1 $arg2 $arg3 >/dev/null 2>&1 &");
(取自:Run PHP Task Asynchronously)
但是我有一个脚本,它取决于第一次执行的状态。示例:
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 &);
这行得通。
&& 是它不在后台运行的原因吗?
如何让示例在后台运行?
【问题讨论】:
-
你有没有机会把它变成一个shell脚本并从PHP运行那个shell?
-
我应该补充一点,shell 命令接受用户提交的参数。例如文件名是用户指定的。所以我猜没有shell脚本。
-
我不确定UNIX shell,但是在Win32 bat中,可以使用
%1、%2等或者直接%s传递参数,所以如果my.csv和myzip是用户提交的参数,也许你可以发出命令shell.sh my.csv myzip > /dev/null 2>&1 &和 shellmongoexport... %1 && %2或类似的东西。 -
我想我可以将变量作为参数传递给 shell 脚本。谢谢。如果没有更好的方法,我会把它作为最后的手段。
标签: php exec background-process