杀掉运行超过5分钟以上指定服务的进程

需求背景: 

有个libreoffice服务,正常情况下运行几秒钟就会自动结束,但是有时候因为机器资源占用过多、或机器配置太低等原因会导致该进程僵死,这样下次调用该业务时会有影响,所以需要将该服务运行时间超过5分钟的进程杀掉。

思路:

1.通过ps获取该服务的PID和运行时间;

2.判断运行时间是否超过5分钟(这里转换为300秒了);

3.根据判断结果确定是否杀掉进程;

4.通过crontab定时执行该脚本;

脚本(kill_service.sh):

#!/usr/bin/bash
pro_name=libreoffice
username=`whoami`
interval=300
#pro=`ps -eo pid,user,etime,cmd | grep ${pro_name} |grep -v grep | awk '{pid=$1;user=$2;etime=$3 ; print pid,etime ; }'`
ps -eo pid,user,etime,cmd | grep ${pro_name} |grep -v grep | awk '{pid=$1;user=$2;etime=$3 ; print pid,etime ; }' | while read LINE
do
        #获取进程PID
        pid=`echo $LINE | awk '{print $1}'`
        #获取程序运行时间,单位为秒,超过60分钟则设置为默认值99999999999999
        elapsed=`echo $LINE | awk -F: 'BEGIN {
        time=99999999999999;
        }
        {
                if(NF>=3){
                        print time;
                }else if(NF>=2){
                        time=$(NF-1)*60+$NF;print time
                }else{
                        print "error format"
                }
        }'`
        #判断程序运行的时间是否超过指定周期$interval
        if [ $elapsed -ge $interval ];then
                echo "$LINE"
                kill -9 $pid
        fi
done

定时任务:

#每隔2分钟执行一次
*/2 * * * * sh /root/kill_service.sh

 

相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页