Scripting

freebsd 創建一個腳本來檢查服務是否處於活動狀態,如果沒有則啟動服務

  • January 10, 2013

這是交易:我在碼頭上執行一個帶有 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 更快地響應,向您發送通知,並且您可以指定執行狀況檢查以確認應用程序正常執行。

http://mmonit.com/monit/

除了在 crontab 中創建服務之外,您還可以添加一個小型守護程序來檢查該服務是否正在執行,並在未執行時重新載入它。使用 Suku 的檢查條件,您可以編寫一個像這樣的小守護程序:

#!/bin/sh

reloader() {
 while :
 do
     sleep 5
     service httpd jetty || sudo service jetty start
 done
}

reloader &

如果您的服務正在執行,此腳本將每 5 秒檢查一次,並且不會消耗太多 CPU。這比 crontab 中的作業更精確。

以 root 身份執行此腳本,而不是將某些密碼作為明文放在腳本本身上,可能會更安全,效率也不會降低。

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