服务器进程可能会出现意外退出,防御这种情况,可以通过脚本来实现
1. 直接用脚本
check.sh
#!/bin/sh
#------------------------------------------------------------------------------
# 函数: CheckProcess
# 功能: 检查一个进程是否存在
# 参数: $1 --- 要检查的进程名称
# 返回: 如果存在返回0, 否则返回1.
#------------------------------------------------------------------------------
P_NAME = "test"
P_NUM = 4
CheckProcess()
{
# 检查输入的参数是否有效
if [ "$1" = "" ];
then
return 1
fi
#$PROCESS_NUM获取指定进程名的数目,为1返回0,表示正常,不为1返回1,表示有错误,需要重新启动
PROCESS_NUM=`ps -ef | grep "$1" | grep -v "grep" | wc -l`
if [ $PROCESS_NUM -eq $P_NUM ];
then
return 0
else
return 1
fi
}
# 检查test实例是否已经存在
while [ 1 ] ; do
CheckProcess ${P_NAME}
CheckQQ_RET=$?
if [ $CheckQQ_RET -eq 1 ];
then
# 杀死所有test进程,可换任意你需要执行的操作
killall -9 ${P_NAME}
exec ./test &
fi
sleep 1
done
这种办法会使进程号不断地增加。
2. 用crontab加脚本实现
每两分钟运行一次脚本
restart.sh
#!/bin/sh
# 用法:在coratab里加入*/2 * * * * /etc/restart.sh test /etc/run
# echo "*/2 * * * * /etc/restart.sh test /etc/run" >>/etc/crontab
# /etc/restart.sh 自动重启脚本
# test 为对应进程的关键字
# /etc/run 为启动程序的脚本
if [ $# -ne 2 ];
then
echo Usage: $0 MonProgram RunScript
else
PROG=`ps -ef|grep $1|grep -v $0|grep -v grep`
if [ "$PROG" == "" ];
then
$2
fi
fi