本周開始,新手游進行刪檔封測階段,前兩天表現還好,今天更新後出現幾次宕機行為,比較影響玩家的測試和體驗,我們的服務器管理系統尚未完善,為了晚上能夠預防宕機造成損失,先用一種簡單的方案臨時頂替一下。
實現原理主要是使用linux提供的crontab機制,定時查詢服務器進程是否存在,如果宕機則處理我們預設的腳本。
首先我們要向crontab加入一個新任務。
# crontab -e:進入編輯狀態,其實就是使用vi編輯。
*/1 * * * * sh /root/monitor.sh
我這裡只是簡單的設置每分鐘調用一個shell腳本monitor.sh。這裡可以配置的更強大,大家可以去搜索一下crontab的教程,網上有很多這類的教程。
這裡需要注意的是,很多教程配置command的時候直接使用/root/monitor.sh,我設置的時候發現這樣配置不會執行shell腳本,前面加上sh後就能執行了。
然後我們開始寫monitor.sh這個shell腳本。
#! /bin/sh proc_name="WorldFrame_d"
#進程名 proc_num()
#查詢進程數
{
num=`ps -ef | grep $proc_name | grep -v grep | wc -l`
return $num}proc_num number=$?
#獲取進程數量
if [ $number -eq 0 ]
#如果進程數量為0then
#重新啟動服務器,或者擴展其它內容。
cd /longwen/server/sbin/linux; ./WorldFrame_d -c 1fi
我這個腳本,只是簡單的檢測了進程是否存在,不存在就自動重啟服務器。
這裡其實也可以擴展一下,比如對日志文件的處理以及重啟時間等的記錄等等。
需要注意的是在windows編輯sh文件要注意格式問題(CR/LR),否則容易出現sh執行錯誤的BUG。
好了,進行測試吧,我這裡測試OK,記錄一下,希望能幫到其它遇到類似問題的同學。謝謝閱讀,希望能幫到大家,請繼續關注腳本之家,我們會努力分享更多優秀的文章。