2013-04-01 67 views
1

我正在運行一個crawler程序,使用cron作業每小時執行一次程序。當所有東西都如預期的那樣,腳本自動退出。但是,由於某些原因,有時會陷入無限循環。它變得更糟,因爲我使用鎖定文件來避免重複運行,當爬蟲卡住它永遠不會再次運行,直到它手動殺死它(ps aux - > kill)在給定時間後自動終止Linux進程/ php腳本

如何確保腳本在幾小時後會發生什麼?

我應該在php代碼中添加一行嗎?直接在Linux中這樣做會不會更健壯?

到目前爲止,我的最佳想法是用一個必要的命令創建一個小批處理文件,然後用cron而不是直接調用該批處理文件。

我說得對嗎,命令應該是什麼?

感謝

編輯:我發現迄今最好的是:http://www.linuxquestions.org/questions/linux-general-1/how-to-kill-the-process-after-specific-time-624453

bash的是太長了,我希望的是更聰明,更短的解決方案。

乾杯

+1

我會添加一些日誌代碼來找出無限循環問題。從長遠來看,這可能會更好。 – will

+0

顯然這是最好的解決方案。儘管如此,鑑於我正在爬取很多網站,並且他們一直在變化,我需要找到解決方案來解決我的問題。 –

+0

您可以添加計時器,以便您每個網站最多花費x秒。我會通過爲每個網站產生一個新線程來做到這一點,然後在計時器過去後將其殺死。 – will

回答

1

這會殺了它開始被更多的則一小時前PHP程序:

$(ps -eo comm,pid,etimes | awk '/^php/ {if ($3 > 3600) { print "kill "$2}}') 

3600 - 時間戳在第二

附:你可以運行命令

> ps -eo comm,pid,etimes 

之前和之後,以確保一切正常。

P.P.S.我知道這是老問題,但有人可能會發現它有幫助