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