我有一个PHP脚本,它会执行一些繁重的工作,因此尝试使用以下代码作为后台脚本启动:

exec("script.php > /dev/null 2> /dev/null &");

怎么了:


当我将上述代码作为Web应用程序的一部分运行时,脚本退出
大约一分钟后。
当我将代码作为Web应用程序的一部分运行而没有最终命令时
“&”号,工作正常-但exec()等待脚本执行
在加载下一页之前完成,由于用户盯着无响应的页面而无法达到目的。
当我使用最终的&符号从控制台以自己的身份运行shell命令script.php > /dev/null 2> /dev/null &时,该作业运行良好。
当我从控制台作为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超时的问题。

最佳答案

set_time_limit


不包括外壳执行时间。
http://php.net/manual/en/function.set-time-limit.php

尝试在该站点的注释中使用代码示例。

07-26 09:35
查看更多