Linux shell脚本监控进程崩溃自动重启

例如:程序名称为go-demo

创建监控主脚本 vi demo.sh

#!/bin/sh

#程序所在目录
SERVICE_PATH="/data/www/abc"

#启动程序名称
SERVICE_NAME="go-demo"

#启动程序命令
START_CMD="./$SERVICE_NAME -config=demo.ini"

#监控日志名称
LOG_FILE="restart.log"

cd $SERVICE_PATH

pwd

while true 

do
    procnum=`ps -ef|grep $SERVICE_NAME|grep -v grep|wc -l`
    if [ $procnum -eq 0 ]
    then
        echo `date +%Y-%m-%d` `date +%H:%M:%S`  $SERVICE_NAME >>$LOG_FILE
        ${START_CMD}
    fi
    sleep 1
done

创建启动脚本 vi start.sh

#!/bin/sh
echo "Start Demo Service..."
nohup ./demo.sh >/dev/null 2>&1 &

创建停止脚本 vi stop.sh

#!/bin/sh
echo "Stop Demo Service..."
killall -15 demo.sh && killall -15 go-demo

需要确定系统是否支持killall命令,CentOS下可使用 yum install psmisc 命令安装

最后赋予三个脚本文件可执行权限,运行start.sh或stop.sh即可

chmod +x demo.sh
chmod +x start.sh
chmod +x stop.sh