背景介绍
当我们在进行Linux下程序开发或者服务部署时,进程会遇到某一程序进程异常消失,影响正常功能的实现,因此本文介绍一种进程监控脚本的实现,实现某一进程在意外结束后可以自动重新启动,并且脚本可扩展性强,移植方便。
具体实现
#soft_progress_monitor.sh
#使用说明
#need_monitor_progress[n]="XXX"
#need_execute_progress[n]="XXX"
#以上第n个需要监控的程序写入need_monitor_progress[n]中
#第n个需要监控的程序结束后执行的命令写入need_execute_progress[n]中
need_monitor_progress[0]="abcd"
need_execute_progress[0]="/usr/local/abcd"
need_monitor_progress[1]="efg"
need_execute_progress[1]="/usr/local/efg -h -c -v"
log_path="/mnt/sdcard/zlog/autostart.log"
echo "log path is $log_path"
while true
do
curtime=$(date "+%Y-%m-%d %H:%M:%S")
i=0
while [[ i -lt ${#need_monitor_progress[@]} ]]
do
process=`ps | grep ${need_monitor_progress[i]} | grep -v "grep" | wc -l`
if [ $process -eq 0 ]
then
echo "$curtime ${need_monitor_progress[i]} died reatart..." >> $log_path;
echo "$curtime ${need_monitor_progress[i]} died reatart..."
sh -c ${need_execute_progress[i]} &
echo "$curtime ${need_monitor_progress[i]} restart finished" >> $log_path;
echo "$curtime ${need_monitor_progress[i]} restart finished"
fi
let i++
done
sleep 2
done
移植说明
need_monitor_progress[0]="XXX"
need_execute_progress[0]="XXX"
need_monitor_progress[1]="XXX"
need_execute_progress[1]="XXX"
need_monitor_progress[2]="XXX"
need_execute_progress[2]="XXX"
need_monitor_progress[3]="XXX"
need_execute_progress[3]="XXX"
按照以上格式,如果需要添加新的监控简称,只需要增加need_monitor_progress[4]="xxx"
和need_execute_progress[4]="xxx"
即可
其中need_monitor_progress
是需要监控进程的名字,需要保证ps | grep xxx
执行的结果唯一,need_execute_progress
是进程意外关闭后需要执行的指令,即该进程正常启动需要执行的指令
注意事项
对于ps
命令,脚本中在嵌入式linux中执行,该命令经过剪裁,已经没有-e -A -l -f 等参数,实际情况根据目标机器上ps
命令执行情况为准
一般有
ps
ps -A
ps -e
ps -elf
大家根据实际情况调整ps | grep ${need_monitor_progress[i]} | grep -v "grep" | wc -l
该命令
一般情况ps -e | grep ${need_monitor_progress[i]} | grep -v "grep" | wc -l
或者ps -elf | grep ${need_monitor_progress[i]} | grep -v "grep" | wc -l
即可