LUNUX下一个用脚本实现的简单看门狗程序, 可以完成对指定进程的重启\定时查杀,如果你有这方面的需要,只要稍修改就可使用. 贴出来分享一下
上脚本:
#!/bin/bash -
######################脚本配置项################################################
process_name=WorkerMan #进行查杀的进程名称
processd="php /var/www/workerman-chat/start.php start -d" #进程启动的命令
enable_start_processd=1 #是否启用"进程启动",在启用状态下如果发现进程不存了,那么将执行进程启动命令. 如果值为0将不启用
iTimeDur=20 #多长时间执行一次KILL 单位秒,每次只杀一个进程
#################################################################################
sleep_time=10 #脚本运行SLEEP时间
while_times=0 #一次任务执行的循环计数
declare -a PROCESS_ARY
#if [ $# -lt 1 ]
#then
# echo "缺少参数:procedure_name"
# exit 1
#fi
#主循环开始
while true
do
#如果数组中没有元素,统计进程运行的数目
echo "the process number [ ${#PROCESS_ARY[*]} ]"
if [ ${#PROCESS_ARY[*]} -eq 0 ];then
PROCESS=`ps -ef|grep $process_name|grep -v grep|grep -v PPID|awk '{ print $2}'`
x=0
for j in $PROCESS
do
PROCESS_ARY[x]=$j
echo "the process [ ${PROCESS_ARY[x]} ]"
x=$[x+1]
done
#没有进程了可能要进行启动
if [ ${#PROCESS_ARY[*]} -eq 0 ] && [ $enable_start_processd -eq 1 ];then
$processd
fi
else
#存在进程, 就杀掉一个 (`expr $while_times \*$sleep_time`)
totaltime=$[while_times*sleep_time]
echo "totaltime = $totaltime"
if [ $totaltime -ge $iTimeDur ] && [ ${#PROCESS_ARY[*]} -gt 0 ];then
iIndex=$[${#PROCESS_ARY[*]}-1]
echo "Kill the $process_name process [${PROCESS_ARY[iIndex]}]"
kill -9 ${PROCESS_ARY[iIndex]}
unset PROCESS_ARY[iIndex]
while_times=0
fi
fi
while_times=$[while_times+1]
sleep $sleep_time
done
#主循环结束