Init-Script

執行狀態時,初始化腳本是否總是返回正確的退出程式碼?

  • May 5, 2017

我正在嘗試編寫一個 cron 作業腳本,該腳本將檢查我的服務是否正在執行,如果沒有則重新啟動它們,因此我不必手動執行。

現在,我在網上查找瞭如何在 bash 腳本中檢查服務的狀態,基本上發現了以下內容,但有一些變化:

ps auxw | grep <service_name> | grep -v grep

if [[ $? != 0 ]]; then
       /etc/init.d/<service_name> start
fi

我做了一些思考,並認為它可能會少一些hacky,而更像是一種使用init腳本的一般功能來檢查它的方式:

/etc/init.d/<service_name> status

if [[ $? != 0 ]]; then
   /etc/init.d/<service_name> start
fi

如果我錯了,請糾正我,但這不是總是有效嗎?這是一般初始化腳本的屬性,它們返回退出程式碼嗎?提前致謝。:)

不是100%的時間。不過,這是一個很好的衡量標準。

CFEngine 3 在“服務承諾”中使用它來檢查服務是否正在執行。如果退出程式碼/etc/init.d/<servicename> status為零,則假定服務正在執行。

我剛剛遇到了 BitBucket 不遵守這個約定:/etc/init.d/atlbitbucket status即使它沒有執行也返回 0。但是,我認為這是 init 腳本中的不良行為(錯誤),它不遵循約定。


找到它的參考;Linux 標準基本規範指出:

如果請求狀態操作,初始化腳本將返回以下退出狀態程式碼。

0         program is running or service is OK
1         program is dead and /var/run pid file exists
2         program is dead and /var/lock lock file exists
3         program is not running
4         program or service status is unknown
5-99      reserved for future LSB use
100-149   reserved for distribution use
150-199   reserved for application use
200-254   reserved

所以是的,可以指望兼容的應用程序以這種方式執行。

引用自:https://unix.stackexchange.com/questions/226484