確保 cron 守護程式保持運行

確保 cron 守護程式保持運行

如果在一個Debian 7在託管虛擬機器和最新cron守護程序中運行的伺服器(喘息)存在錯誤,因此 cron 在沒有明顯原因的情況下停止運行。由於這種情況只發生過一次,因此很難調試。

如果 cron 再次崩潰並發送電子郵件警報,如何確保它自動重新啟動?

答案1

您可以隨時查看監控專案.
您可以重新啟動服務並讓它們跟上。
如果您無法按照評論建議修復您的 cron。

答案2

我不能運行 daemontools 之類的東西來監視和重新啟動該進程嗎?

確實是的;在某些機器上我就是這樣做的。 「類似 daemontools 的東西」實際上是來自的服務管理員小吃包但 daemontools 家族的其他成員則完全有能力管理 GNU cron。 (Vixie cron 是另一回事,但你確實說的是 Debian。)

GNU cron 是在 daemontools 系列服務管理下運行的最簡單的服務之一。 Gerrit Pape 的運行腳本集合有它,nosh 工具集附帶的服務捆綁包集合也有。

也就是說,我不記得曾經需要重新啟動 GNU cron因為它崩潰了

從最重要的方面來說,服務管理不僅僅是自動重新啟動。這是關於日誌記錄和資源控制,兩者都與任務相關診斷原因GNU cron 正在崩潰。

診斷問題涉及以下內容:

  • 編輯run用於softlimit啟用核心轉儲的程式。
  • 編輯restart腳本(或同等內容)...
    • …檢查守護程式是否退出或透過訊號終止。
    • ...收集核心轉儲。
    • ...發出警報並發送郵件通知。 (我曾經設定過一個腳本,將崩潰/中止restart的最後幾行郵件郵寄給我。)log/main/current
    • ...調整重啟速率限制。
  • 讀取 GNU cron 的單獨日誌和服務管理員自己的日誌,以確定守護程式重新啟動的時間和頻率,以及它輸出的錯誤訊息(如果有)。

進一步閱讀

答案3

由於無法crond透過我進行監控,因此crond我會這樣做:
echo "while true; do if ! (ps aux |grep crond |grep -v grep); then /etc/init.d/crond start; fi && sleep 5; done &" >> /etc/rc.local

答案4

無需安裝daemontoolsrunitsupervise等。您只需需要的東西就可以透過 init 輕鬆處理。添加到/etc/inittab:

cron:2345:respawn:/usr/sbin/crond -n

首先確保crond支援該-n選項。這告訴它不要分叉並保留在前台。 ** 請務必從 rc 腳本中停用 crond **。

/usr/lib/lsb/remove_initd /etc/init.d/crond

如果由於某種原因 crond 輸出到 stdout 或 stderr,您將需要編寫一個包裝器腳本來處理該輸出,並產生包裝器腳本。保持腳本簡單:

#!/bin/sh
#crond-wrapper.sh 
exec crond -n &>>/var/log/crond

或者,您可以使用在 while 迴圈內init.d/crond呼叫的腳本來修改現有的打包腳本。crond -n但在這種情況下,您必須巧妙地保存該pid腳本以供以後使用。

相關內容