我有一个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会在第一时间要求我执行此操作。有人可以给我一些帮助吗?
答案 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");