shell脚本, 检测cpu异常程序,自动杀死该程序

9 篇文章 0 订阅

shell脚本, 检测cpu异常程序,自动杀死该程序

  • 自定义间隔时间
  • 自定义统计次数
  • 自定义exclude_pid列表
#!/bin/bash

# 配置参数
max_usage=90       # cpu超过当前值后开始根据pid计数, 连续超过30秒则杀死进程
exclude_pid=(7263) # 排除进程列表
sleep_time=3       # 间隔采集时间
count_num=10       # 判断次数(连续采集N/次后杀死程序)


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'`


#echo `date` "$cmd: PID: $now_pid, CPU: $now_cpu_usage" >> killtop.log

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不相同,重置pid和计数
      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
   # kill -9 $pid
   echo `date` "-----重置pid计数" >> killtop.log
   echo "#########################################################" >> killtop.log
   echo "#########################################################" >> killtop.log
   echo "#########################################################" >> killtop.log
   pid=0
   count=0
fi

sleep $sleep_time
done


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值