Init-Script
執行狀態時,初始化腳本是否總是返回正確的退出程式碼?
我正在嘗試編寫一個 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
所以是的,可以指望兼容的應用程序以這種方式執行。