我正在使用Ubuntu 12上的nginx上運行的PHP網站,它可以在後臺啓動長時間運行的作業。爲什麼在後臺運行PHP進程會導致整個站點掛起?
這個想法是,用戶提交一個表單,它在另一個進程中啓動一個長時間的工作(php_fpm應該處理這個問題),並且如果作業開始或者沒有,立即向用戶返回成功/失敗消息。
也許這是不是做的最好的方法,但是這是我在做什麼:
`php $docroot/longjob.php $this->ID arg2 &> error_log &`;
($這個 - > ID和ARG2都是簡單的字符串配置工作。)
作業啓動並正常運行,但面向前方的網站會掛起直到作業完成。頁面無法加載,並且服務器在長時間工作完成之前不會響應。我並不期待這一點。爲何會發生這種情況?
更新:所以,我一直在嘗試......不幸的是,關閉會話處理程序並嘗試使用nohop命令並沒有阻止掛起。但它只是對我來說,在我發起請求的機器上。我可以從我的手機登錄,並且該網站可以正常工作,而且它也適用於其他用戶(phew)。任何其他的想法,爲什麼它只會掛在發起請求的機器上?
如果它的事項,這是時顯示的默認nginx的錯誤頁面:
您正在查找的頁面暫時不可用。
請稍後再試。
內置會話save_handler將鎖定會話文件,直到該過程完成並且下一個進程需要等待,直到會話文件解鎖。因此,如果您正在使用會話,則可能需要在啓動長時間運行的作業之前調用session_write_close。 –
@AlexandruG。我確實在使用會話。從來沒有想到這一點。當我有機會並且回報時,我會嘗試的! – Matt
@AlexandruG。不幸的是,使用'session_write_close()不會停止等待。但是,似乎只能從我開始工作的計算機上掛起。所以我想知道是否仍然存在會話問題......或者是nginx/php-fpm做了些什麼... – Matt