#!/bin/bash
#pid目录
dir=/data/pid
#定义多少分钟即算假死
sleep_time=$[10*60]
#定义grep的脚本名称
filter=/etc/sh/crontab
#列表
list=`ls ${dir}`
#现在的时间戳
now_time=`date +"%s"`
for I in $list
do
#判断是否纯数字
echo $I | [ -n "`sed -n '/^[0-9][0-9]*$/p'`" ] && echo 1 &>> /dev/null || continue
#文件中的时间
time=`cat ${dir}/${I}`
#时间差
dec_time=$[now_time-time]
if [ $dec_time -gt $sleep_time ];then
#查找相关进程
process=`ps -A -opid,args | grep $I | grep ${filter} | grep -v grep `
#脚本名称
args=`echo $process | awk '{print $3}'`
#如果进程不为空
if [ ! -z $args ];then
#中止进程
kill $I &>> /dev/null
#启动进程
nohup /bin/sh $args & &>> /dev/null
#记录日志
echo "`date +%Y%m%d-%H:%M:%S` ${args}重新启动,超时时间为${dec_time}秒" &>> /var/log/monitor/monitor_overtime_nohup.log
fi
#删除pid文件
rm $dir/$I -rf
fi
done
2018-04-10
shell脚本实现任务超时监控
评论
发表评论
姓 名: