我正在使用supervisor(http://supervisord.org/)來守護一個相當標準的PHP腳本。該腳本的結構是這樣的:如何檢測PHP CLI腳本處於掛起狀態
while (1) {
// Do a SQL select
// for any matching rows, do something
// if I have been running for longer than 60 mins, exit
}
今天,這個腳本(它已經相當穩定一段時間了)掛起。它沒有崩潰(即發出SIGHUP或者SIGTERM信號),這會提醒supervisord重啓該過程。它在處理過程中沒有遇到任何錯誤,這些錯誤或者被腳本捕獲,或者至少引發了致命的錯誤並退出。而不是這些「可捕捉」的場景,它只是坐在那裏。我們確實有一個cron作業設置,每小時運行一次以通過supervisorctl鉤子重新啓動腳本,因爲似乎普遍認爲PHP腳本在內存方面存在漏洞,如果長時間運行,很可能會重新啓動。重啓後,腳本正常恢復運行。
我的問題:我如何檢測到這個腳本已經掛起?我甚至無法開始診斷或解決這個問題,爲什麼它掛起,如果我不知道該狀態的警報。我正在尋找這方面的軟件解決方案,或者我可以採用一些方法來自己編寫解決方案(無論是PHP,Python,Perl還是shell)。
該腳本使用PHP 5.2.6編寫,並在最新的RHEL 5服務器上運行。
請讓我知道,如果我可以分享任何額外的信息,如果它可以幫助一個更真棒的解決方案。
謝謝!
Shaheeb R.
mysql_free_result是defini非常有趣,以前沒有遇到過。關於您建議嘗試從外部腳本記錄和監視此日誌:這對我們可能是可行的。我們已經在腳本中執行應用程序日誌記錄,因此它將構成日誌觀察器來監視它。 –
作爲日誌觀察者,我們取得了SEC(http://simple-evcorr.sourceforge.net/)的良好成功,我們可以使用此工具構建解決方案。我得說,我很希望有一個'現成的'解決方案! –