天天看點

定時清除linux指定名稱的程序

因為項目的問題,時不時會出現多個逾時運作程序,影響系統運作。

寫了一個殺程序的腳本,然後定時去執行它。

1  編寫殺程序的腳本    /root/kill_service.sh

#!/usr/bin/bash
# 檢查tesseract 程序,如果超過30秒,就把它kill掉
# 該程式需要寫入定時任務(每10分鐘運作一次)
# 每隔10分鐘執行一次
# */10 * * * * sh /root/kill_service.sh

# 需要監控的程序名稱(例如tesseract)
pro_name=tesseract

# 程序歸屬的使用者
username=root

# 逾時時間30秒(假定認為該程序超過30秒,就認為該程序逾時,需要kill掉)
interval=30


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}'`
        #擷取程式運作時間,
        miao=`echo $LINE | awk -F: '{print $2}'`
        fen=`echo $LINE | awk -F: '{print $1}' | awk -F' ' '{print $2}'`
        let "second=miao+fen*60"
       
        #判斷程序運作的時間是否超過指定周期$interval
        if [ $second -ge $interval ];then
                echo "555 $LINE kill $elapsed second $etime ssss"
                # 殺死該程序
                kill -9 $pid
        fi
done
           

2. 設定時任務,定時執行上面的腳本

切換到root 使用者下運作

#檢視定時任務

crontab -l

#編輯定時任務

vim /etc/crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed


#每隔2分鐘執行一次
*/2 * * * * sh /root/kill_service.sh &>> /root/log/kill_service.log
           

# 啟動定時任務

crontab /etc/crontab

繼續閱讀