Scripting
freebsd 創建一個腳本來檢查服務是否處於活動狀態,如果沒有則啟動服務
這是交易:我在碼頭上執行一個帶有 apache solr 的 freebsd 網路伺服器
每隔一段時間(一個月幾次)碼頭退出,我必須通過鍵入重新啟動它:
service jetty start
我對創建 unix 腳本有點陌生。當然,我應該檢查服務停止的原因,但為了快速修復,我不介意讓 cron 每半小時執行一次以檢查服務是否仍在執行。
我在一個網站上找到了這個,但我不完全理解它在做什麼,所以我無法根據我的需要對其進行修改。
# check rc script supports status ${SERVICE} 2>&1 | /usr/bin/grep '|status|poll' >/dev/null if [ $? -eq 0 ] then # check status STATUS=$(${SERVICE} status) if [ $? -gt 0 ] then # service not running try to start echo ${STATUS} ${SERVICE} start ${SERVICE} status fi fi
所以這是我可以從上面的程式碼中得到的:
{SERVICE} 是一個變數,所以我可以用 ‘service jetty’ 替換它?
something gets thrown away :) if [something -equals 0] if something > 0 starting service fi fi
是什麼
2>&1
意思/做什麼?或者
service jetty start
從 cron 執行會更好嗎?因為如果它已經在執行,我會得到已經在執行的響應。
你有沒有想過像monit這樣的東西?它會比 cronjob 更快地響應,向您發送通知,並且您可以指定執行狀況檢查以確認應用程序正常執行。
除了在 crontab 中創建服務之外,您還可以添加一個小型守護程序來檢查該服務是否正在執行,並在未執行時重新載入它。使用 Suku 的檢查條件,您可以編寫一個像這樣的小守護程序:
#!/bin/sh reloader() { while : do sleep 5 service httpd jetty || sudo service jetty start done } reloader &
如果您的服務正在執行,此腳本將每 5 秒檢查一次,並且不會消耗太多 CPU。這比 crontab 中的作業更精確。
以 root 身份執行此腳本,而不是將某些密碼作為明文放在腳本本身上,可能會更安全,效率也不會降低。