2015-07-22 24 views
0

我有一個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超時的問題。

+0

嘗試將您的輸出管道輸出到日誌文件,以查看是否有錯誤或意外發生了'script.php> /tmp/script.log 2>&1&' –

+0

試過了。它只是毫不客氣地停下來。 – schnauss

+0

60秒確實聽起來像超時問題...嘗試將'phpinfo()'轉儲到您的輸出日誌中,以確保'max_execution_time'正在由'set_time_limit()'調用更新? (託管公司可以限制你可以設置的防止對其他用戶的不利影響) –

回答