Linux

如何殺死失控的 cronjob

  • June 3, 2011

我有一個設置為不斷執行的 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 auxps -ef

你這樣做是錯的。(至少在我的拙見中:-)

你可以按照 Geekosaur 或 James Yale 建議的方式做你想做的事,但我認為你真的想要 PHP 的pcntl_alarm()函式(及其相關函式pcntl_signal),這將允許你的 PHP 腳本利用該SIGALRM設施並在出現問題時自行終止。

你對鬧鐘所做的就是你的電話(它可以簡單到“如果我已經跑了一個小時就退出”,也可以復雜到“檢查我們是否從 twitter 獲取數據。如果沒有重新初始化連接,如果我們仍然沒有得到數據退出並讓腳本稍後再次執行” - 這完全取決於您的腳本有多複雜)。

更多關於SIGALRM信號處理的問題可能應該轉到 StackOverflow - 他們(希望)熟悉它,並且可以從程式的角度為您提供更多指導 :-)

引用自:https://serverfault.com/questions/276748