在使用C/C++做服务时,服务进程常常因为各种原因死掉,为此需要将服务是守护起来,保证在服务死掉的时候可以重启
1.编写shell脚本,判断服务是否在运行,如果没有运行脚本自动重启服务。以下是一个脚本示例:
#!/bin/bash CheckProcess() { #$PROCESS_NUM获取指定进程名的数目,为1返回0,表示正常,不为1返回1,表示有错误,需要重新启动 PROCESS_NUM=`ps -ef | grep "$1" | grep -v "grep" | wc -l` return $PROCESS_NUM } CheckProcess "mgm" CheckQQ_RET=$? if [ $CheckQQ_RET -le 0 ]; then export DISPLAY=:0; /usr/bin/mate-terminal -x /home/start_mgm.sh fi CheckProcess "laiserver" CheckQQ_RET=$? if [ $CheckQQ_RET -le 0 ]; then export DISPLAY=:0; /usr/bin/mate-terminal -x /home/start_laiserver.sh fi
其中定义一个CheckProccess()函数,通过ps -ef | grep "$1" | grep -v "grep" | wc -l 来获取对应传入名称的进程在系统中运行的个数。当进程个数为0时重新启动对应进程,这里我检测了mgm进程和laiserver进程,当进程个数为0的时候执行export DISPLAY=:0;和/usr/bin/mate-terminal -x /home/start_laiserver.sh语句,其中export DISPLAY=:0为在第一个桌面上启动,/usr/bin/mate-terminal -x表示使用终端启动,/home/start_laiserver.sh是用来启动aiserver进程的脚本。
2.使用crontab守护循环执行上述脚本
使用crontab可以对上述shell脚本循环执行
使用
crontab -e
命令可以编辑corntab以将步骤1中的脚本重复执行
在文件的尾部加入 * * * * * /(步骤1脚本的名称)
其中* * * * * *代表每分钟检测一次 ,五个*分别代表 分时日月年
完成后退出便可将mgm进程和aiserver进程守护起来