转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog)
本周開始,新手游进行删档封測阶段,前两天表现还好,今天更新后出现几次宕机行为。比較影响玩家的測试和体验,我们的server管理系统尚未完好,为了晚上能够预防宕机造成损失,先用一种简单的方案暂时顶替一下。
实现原理主要是使用linux提供的crontab机制。定时查询server进程是否存在,假设宕机则处理我们预设的脚本。
首先我们要向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 ] #假设进程数量为0
then #又一次启动server,或者扩展其他内容。 cd /longwen/server/sbin/linux; ./WorldFrame_d -c 1
fi
我这个脚本,仅仅是简单的检測了进程是否存在。不存在就自己主动重新启动server。
这里事实上也能够扩展一下。比方对日志文件的处理以及重新启动时间等的记录等等。
须要注意的是在windows编辑sh文件要注意格式问题(CR/LR),否则easy出现sh运行错误的BUG。
好了。进行測试吧,我这里測试OK,记录一下,希望能帮到其他遇到相似问题的同学。
补充,今天測试的时候发现有时候不运行。跟踪后发现crontab进程出现错误,重新启动一下就ok了。
使用以下的命令查看crond的状态。
#service crond status
假设出现crond (pid xxxx) is running...表示正常,否则表示有异常行为。
我今天出现了crond dead but subsys locked
#service crond start
服务重新启动后问题解决。
版权声明:本文博主原创文章,博客,未经同意不得转载。