Linux
如何殺死失控的 cronjob
我有一個設置為不斷執行的 cronjob。這是一個 php 文件,用於從 twitter 流式傳輸數據。但是 twitter 每隔一段時間就會關閉一次,或者我們失去連接,所以我讓 cron 每分鐘檢查一次以嘗試執行該文件。php 腳本檢查鎖定文件以確保不執行多個副本。問題是這個腳本將連續執行幾個小時,我希望能夠殺死它。但是我似乎無法使用類似的命令找到它
ps ux
cronjob 是由我的使用者啟動的,我希望在 root 下看到它。我似乎根本找不到正在執行的程序。
我在用
/usr/bin/php /var/www/twitter/stream.php
在我的 cron 文件中執行,我知道它正在執行,因為它每分鐘都會將文件寫入目錄。我可以停止 cron,但程序繼續進行,我只需要殺死它。不確定這是屬於這裡還是在 Stack Overflow 上。
要在其中顯示守護程序,
ps
您需要包含-e
選項 (System V/POSIX) 或a
(BSDish)。嘗試ps aux
或ps -ef
。
你這樣做是錯的。(至少在我的拙見中:-)
你可以按照 Geekosaur 或 James Yale 建議的方式做你想做的事,但我認為你真的想要 PHP 的pcntl_alarm()函式(及其相關函式
pcntl_signal
),這將允許你的 PHP 腳本利用該SIGALRM
設施並在出現問題時自行終止。你對鬧鐘所做的就是你的電話(它可以簡單到“如果我已經跑了一個小時就退出”,也可以復雜到“檢查我們是否從 twitter 獲取數據。如果沒有重新初始化連接,如果我們仍然沒有得到數據退出並讓腳本稍後再次執行” - 這完全取決於您的腳本有多複雜)。
更多關於
SIGALRM
信號處理的問題可能應該轉到 StackOverflow - 他們(希望)熟悉它,並且可以從程式的角度為您提供更多指導 :-)