PHP在运行后台进程的bash脚本上调用shell_exec超时

时间:2016-09-02 14:21:32

标签: php linux bash shell

我有一个bash脚本,其中包含几行类似于以下内容的

echo "Do something"
/bin/sh -c 'echo $$>pidfile && exec "command"' &
echo "Ran Command">/path/to/outputfile.txt
exit 0

然后我从PHP脚本中调用它 return shell_exec("/path/to/bash/script arguments");

现在,当我这样做时,命令运行成功,outputfile.txt包含“Ran命令”。

然而,PHP脚本在10秒后超时。 bash脚本需要大约2-3秒才能运行

如果我将线路更改为 return shell_exec("/path/to/bash/script arguments >/dev/null 2>&1");

然后执行,PHP脚本不会超时。

我理解为什么重定向输出让PHP继续执行,但我无法弄清楚为什么PHP会在第一时间要求我执行此操作。有人可以给我一些帮助吗?

1 个答案:

答案 0 :(得分:2)

测试这两个版本,你得到它:

test1.sh /bin/sh -c 'sleep 10' >/dev/null 2>&1 &

test2.sh /bin/sh -c 'sleep 10' &

在命令行上运行php,如

test1.php <?php shell_exec('test1.sh');

test2.php <?php shell_exec('test2.sh');

并看到差异。

test2.sh需要10秒钟,而test1.sh就像你的

一样

return shell_exec("/path/to/bash/script arguments >/dev/null 2>&1");