Linux下进程监控脚本的实现(实现某一进程意外结束后自动重新启动)
背景介绍具体实现移植说明注意事项
背景介绍
当我们在进行Linux下程序开发或者服务部署时,进程会遇到某一程序进程异常消失,影响正常功能的实现,因此本文介绍一种进程监控脚本的实现,实现某一进程在意外结束后可以自动重新启动,并且脚本可扩展性强,移植方便。
具体实现
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即可