我有一个 PHP 脚本,它做了一些繁重的工作,我试图使用以下代码将其作为后台脚本启动:
exec("script.php > /dev/null 2> /dev/null &");
怎么了:
当我将上面的代码作为 Web 应用程序的一部分运行时,脚本会在大约一分钟后退出。
当我将代码作为我的 Web 应用程序的一部分运行而没有最终的 & 符号时,该作业运行良好 - 但
exec()
在加载下一页之前等待脚本完成,当用户盯着无响应的页面时,无法达到目的。script.php > /dev/null 2> /dev/null &
当我从带有最后一个&符号的控制台以我自己的身份运行 shell 命令时,作业运行良好。当我从控制台作为 web 运行 shell 命令时,该作业在大约一分钟后停止运行。
我已经尝试将我的输出通过管道传输到日志文件:script.php > /home/public/tmp/output.txt 2> /home/public/tmp/errors.txt &
. 输出看起来正常,我没有收到任何错误。该脚本只是停止工作。
基本规则似乎是:如果作为 web 或我的前台进程运行,它将完成。如果作为 web 的后台进程运行,它会在大约一分钟后停止工作。
我没有将其作为 cronjob 运行,因为我的主机 (NearlyFreeSpeech) 只能每小时运行一次 cronjobs,这比我想让用户等待的工作只需要几分钟的时间还要多——它可能会在用户时触发启动它。
下标以开头,set_time_limit(60 * 60 * 4);
所以这不应该是 PHP 超时的问题。