我有一個PHP腳本,做我正在嘗試使用下面的代碼斷火作爲後臺腳本一些繁重的時候:超時問題後臺運行PHP腳本的Web
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運行爲前臺進程或作爲我運行,它將完成。如果作爲網站作爲後臺進程運行,大約一分鐘後它將停止工作。
我沒有將它作爲cronjob運行,因爲我的主機(NearlyFreeSpeech)每小時只能運行一次cronjob,這比我想讓用戶等待的時間只需要幾分鐘 - 這可能是因爲當用戶啓動它時會發生火災。
下標以set_time_limit(60 * 60 * 4);
開頭,所以這不應該是PHP超時的問題。
嘗試將您的輸出管道輸出到日誌文件,以查看是否有錯誤或意外發生了'script.php> /tmp/script.log 2>&1&' –
試過了。它只是毫不客氣地停下來。 – schnauss
60秒確實聽起來像超時問題...嘗試將'phpinfo()'轉儲到您的輸出日誌中,以確保'max_execution_time'正在由'set_time_limit()'調用更新? (託管公司可以限制你可以設置的防止對其他用戶的不利影響) –