shell脚本, 检测cpu异常程序,自动杀死该程序
- 自定义间隔时间
- 自定义统计次数
- 自定义exclude_pid列表
#!/bin/bash
max_usage=90
exclude_pid=(7263)
sleep_time=3
count_num=10
pid=0
count=0
while [ 0 == 0 ]
do
base_data=`top -c -b | head -10`
now_pid=`top -c -b | head -10 |awk -F ' ' '{print $1}' |awk 'NR==8'`
now_cpu_usage=`top -c -b | head -10 |awk '{print $9}' |awk 'NR==8'`
cmd=`top -c -b | head -10 |awk '{print $12}' |awk 'NR==8'`
if [ `echo "$now_cpu_usage > $max_usage" |bc` -eq 1 ]
then
echo `date` "-----command: $cmd, PID: $now_pid, $now_cpu_usage %: CPU大于$max_usage %, 准备开始计数" >> killtop.log
is_exclude=0
for i in ${exclude_pid[@]};
do
if [ $now_pid == $exclude_pid ]
then
is_exclude=1
echo `date` "-----PID: $exclude_pid, 属于: exclude_pid" >> killtop.log
break
fi
done
if [ $is_exclude == 1 ]
then
continue
fi
if [ $now_pid == $pid ]
then
count=$(($count+1))
pid=$now_pid
echo `date` "-----$pid: 计数 === $count ===" >> killtop.log
else
pid=$now_pid
count=0
fi
fi
if [ $count -gt $count_num ];
then
echo "#########################################################" >> killtop.log
echo "#########################################################" >> killtop.log
echo "#########################################################" >> killtop.log
echo `date` "-----准备杀死进程PID: $pid, command: $cmd" >> killtop.log
echo `date` "-----重置pid计数" >> killtop.log
echo "#########################################################" >> killtop.log
echo "#########################################################" >> killtop.log
echo "#########################################################" >> killtop.log
pid=0
count=0
fi
sleep $sleep_time
done