Linux

為什麼程序監控腳本會使用出口 1;發現沒有問題?

  • December 8, 2012

一般問題:

在 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 方式。

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