
如果在一個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 的單獨日誌和服務管理員自己的日誌,以確定守護程式重新啟動的時間和頻率,以及它輸出的錯誤訊息(如果有)。
進一步閱讀
- 喬納森·德博因·波拉德 (2015)。守護程式工具家族。經常給的答案。
- 格里特·帕普.Debian 軟體包
- https://unix.stackexchange.com/a/283132/5132
- https://unix.stackexchange.com/a/283580/5132
答案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
無需安裝daemontools
、runit
、supervise
等。您只需需要的東西就可以透過 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
腳本以供以後使用。