為什麼程序監控腳本會使用出口 1;發現沒有問題?
一般問題:
在 Linux (Centos) 伺服器上,如果將由 cron 執行的程序監控腳本設置為關閉,
exit 1;
而不是exit 0;
發現一切正常且不需要任何操作,這是一個錯誤嗎?或者是否有正當的理由打電話
exit 1;
而不是exit 0;
“一切都很好,不需要採取行動”的條件?
exit 0;
在我看來沒有發現問題更合適。但也許有一些我不知道的事情。例如,也許 Cron 有一些特定的東西?或者,程序監控腳本中有一個約定,“失敗”意味著“這個腳本無法解決問題”(而不是我所期望的,exit 1;
這意味著“被監控的程序失敗了”?)我的具體情況:
我正在查看我的網路託管公司編寫的程序監控腳本。我所說的程序監控腳本是指由 Cron 定期執行的腳本,用於檢查重要的系統程序是否正在執行,如果它沒有執行,則採取諸如郵寄管理員或重新啟動程序之類的操作。
這是他們腳本的(通用)結構,用於在埠 8080 上執行的服務(在本例中為 Apache Tomcat):
SERVICE=$(/usr/sbin/lsof -i tcp:8080 | wc -l); if [ $SERVICE != 0 ]; then exit 1; else #take action fi
即使對於像我這樣知識有限的人來說似乎也很簡單,除了這
exit 1;
部分看起來很奇怪。據我了解,exit 0;
關閉一個程序並向執行該程序的父級表示一切正常,exit n;
其中 n>0 和 n<127 表示存在某種錯誤或問題。在這裡,他們的腳本似乎違反了該規則 - 它
exit 1;
在一切正常的情況下呼叫,並且在問題情況下採取補救措施後不會退出。對我來說,這看起來像是一個錯誤——但我在這方面的經驗是有限的。是否存在呼叫
exit 1;
“一切正常,無需採取行動”條件比呼叫更合適的情況exit 0;
?或者這是一個錯誤?更廣泛的上下文非常簡單。這是一個 Centos VPS,執行 Plesk。該腳本由 Cron 通過 Plesk 的“計劃任務”Cron 管理器呼叫。Cron 和這個腳本之間沒有自定義層,它會以不尋常的方式響應退出呼叫。這是一個相當平均的,幾乎開箱即用的 Plesk 管理的 Centos VPS(只要有這樣的東西)。此腳本監控的程序是 Apache Tomcat。
您的總體分析是正確的。
這聽起來並不直接“錯誤”,但絕對是 cron 語義的“駭人聽聞”用法:通常如果 cron 遇到腳本出錯,它會將郵件發送給使用者(或 crontab 中配置的任何地址)。
當人們試圖在腳本執行時總是收到郵件時,我會看到這種腳本。如果一切正常,我個人更喜歡保持沉默的“正常”UNIX 方式。