php脚本执行进程30分钟内不退出的话,就kill掉这些php的脚本进程
admin
2023-02-25 14:00:08
0

线上脚本内容如下:
[root@localhost ~]# cat /data/scripts/check_php.sh

#!/bin/bash
Date=`date "+%Y-%m-%d %H:%M:%S"`
Num=$(ps -ef|egrep  "countjs_syc_site*|countjs_syc_plan*|countjs_syc.php|countjs_syc_img*|setcache*"|grep -v grep |wc -l)
Pid=$(/bin/ps -ef|egrep  "countjs_syc_site*|countjs_syc_plan*|countjs_syc.php|countjs_syc_img*|setcache*"|grep -v grep| awk '{print $2}')

if [ $Num -eq 0 ];then
  echo "$Date No Process" >> /data/scripts/check_php.log
else
  for i in $Pid
    do
        echo "$Date Running Process $i"   >> /data/scripts/check_php.log 
##define Get Seconds var
Sec=$(ps -p $i  h -o etime|tail -1|awk 'BEGIN { FS = ":" }{if (NF == 2) {print $1*60 + $2 } else if (NF == 3) {split($1, a, "-");if (a[2] != "" ) {print ((a[1]*24+a[2])*60 + $2) * 60 + $3; } else {print ($1*60 + $2) * 60 + $3;}}}')

        if [ $Sec -ge 1800 ];then
            echo $Date >> /data/scripts/check_php.log
            ps -ef | grep $i | grep -v grep  >> /data/scripts/check_php.log
            kill -9 $i
            echo "$Date $i The process runs for more than 30 minutes,The process has been killed." >> /data/scripts/check_php.log
        else
            echo "$Date $i The process runs in less than 30 minutes" >> /data/scripts/check_php.log
        fi

    done
fi
echo '===========================' >> /data/scripts/check_php.log

另外一种脚本形式如下:
cat /root/scripts.awk

#!/usr/bin/awk -f  
BEGIN { FS = ":" }
{
  if (NF == 2) {
    print $1*60 + $2
  } else if (NF == 3) {
    split($1, a, "-");
    if (a[2] != "" ) {
      print ((a[1]*24+a[2])*60 + $2) * 60 + $3;
    } else {
      print ($1*60 + $2) * 60 + $3;
    }
  }
}

脚本分析如下:

ps -ef|grep    18020 |grep -v grep|awk '{print $2}'; ps -p  18020  h -o etime|tail -1|awk 'BEGIN { FS = ":" }{if (NF == 3) {split($1, a, "-");if (a[2] != "" ) {print ((a[1]*24+a[2])*60 + $2) * 60 + $3; } else {print ($1*60 + $2) * 60 + $3;}}}'

echo "   03:19:15"|awk 'BEGIN { FS = ":" }{if (NF == 3) {split($0, a, ":");if (a[1] != "" ){print a[1],a[2] }}}'

echo "   03:19:15"|awk 'BEGIN { FS = ":" }{if (NF == 3) {split($0, a, ":");if (a[1] != "" ){print a[1],a[3] }}}'

ps -p 18020  -o etime|tail -1|awk 'BEGIN { FS = ":" }{if (NF == 3) {split($0, a, ":");if (a[2] != "" ) {print a[1],a[2],a[3] };{print ($1*60 + $2) * 60 + $3;}}}'
   03 54 06
14046

awk 字符串处理函数,split

split(s,a,fs)    以fs为分割符 将s字符串分成序列a
split可以实现对字符串进行数组类型的分割,下面用例子来说明下。
[root@localhost ~]# echo 'abcd'?| awk '{len=split($0,a,"");for(i=1;i<=len;i++)print "a["i"]="a[i];print "length="len}'
a[1]=a
a[2]=b
a[3]=c
a[4]=d
a[5]=?
length=5

解析说明:首先把abcd换为一个数组,并且数组的分隔符为没有符号,len=split($0,a,"")为获取了整个数组的长度,之后进行输出。在awk中如果是当做字符串输出的字符,全部用双引号来引起来。

查看php脚本运行的时间:

[root@localhost ~]# ps -p 5493  h -o etime
 1-01:35:00
运行了1天1小时35分00秒
根据进程号过滤出具体的运行脚本名称:
[root@localhost ~]# ps -ef|grep 5493|grep -v grep
root      5493  5490  0 9月18 ?       00:00:00 /bin/bash /data/cron/chksh/setcache.sh
root      5506  5493  0 9月18 ?       00:00:00 /usr/bin/php /data/cron/ptask/setcache.php

[root@localhost ~]#  ps -p 5493  h -o etime|tail -1
 1-01:40:58

[root@localhost ~]#  ps -p 5493  h -o etime|tail -1|awk 'BEGIN { FS = ":" }{if (NF == 3) {split($1, a, "-");if (a[2] != "" ) {print a[1],a[2],a[3]}}}'
 1 01

计算进程运行的分钟数:

[root@localhost ~]# ps -p 5493  h -o etime|tail -1
 1-01:47:56

[root@localhost ~]# ps -p 5493  h -o etime|tail -1|awk 'BEGIN { FS = ":" }{if (NF == 3) {split($1, a, "-");if (a[2] != "" ) {print ((a[1]*24+a[2])*60 + $2)}}}'
1547
计算进程运行的秒数:
[root@localhost ~]# ps -p 5493  h -o etime|tail -1|awk 'BEGIN { FS = ":" }{if (NF == 3) {split($1, a, "-");if (a[2] != "" ) {print ((a[1]*24+a[2])*60 + $2)*60 + $3}}}'
93036

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

[root@localhost ~]# ps -p33920 h -o etime
   04:31:49

[root@localhost ~]# ps -p33920 h -o etime|awk 'BEGIN { FS = ":" }{if (NF == 3) {split($1, a, "-");if (a[2] != "" ) {print a[1]}}}'
[root@localhost ~]# ps -p33920 h -o etime|awk 'BEGIN { FS = ":" }{if (NF == 3) {split($1, a, "-");if (a[2] != "" ) {print a[2]}}}'
[root@localhost ~]# ps -p33920 h -o etime|awk 'BEGIN { FS = ":" }{if (NF == 3) {split($1, a, "-");if (a[2] != "" ) {print $2 }}}'
[root@localhost ~]# ps -p33920 h -o etime|awk 'BEGIN { FS = ":" }{if (NF == 3) {split($1, a, "-");if (a[2] != "" ) {print $3 }}}'

此时数值都为空

所以此时采用下面的公式计算秒数也为空:

 ps -p33920 h -o etime|awk 'BEGIN { FS = ":" }{if (NF == 3) {split($1, a, "-");if (a[2] != "" ) {print ((a[1]*24+a[2])*60 + $2)*60 + $3}}}'

然而采用下面的公式来计算是正确的:

[root@localhost ~]# ps -p33920 h -o etime|awk 'BEGIN { FS = ":" }{if (NF == 3) {split($1, a, "-");if (a[2] != "" ) {print ((a[1]*24+a[2])*60 + $2)*60 + $3} else {print ($1*60 + $2) * 60 + $3;}}}'
16908
[root@localhost ~]# ps -p33920 h -o etime && ps -p33920 h -o etime|awk 'BEGIN { FS = ":" }{if (NF == 3) {split($1, a, "-");if (a[2] != "" ) {print ((a[1]*24+a[2])*60 + $2)*60 + $3} else {print ($1*60 + $2) * 60 + $3;}}}'
   04:44:18  实际时间格式
17058     一共秒数
ps -p 33573  h -o etime|tail -1|awk 'BEGIN { FS = ":" }{if (NF == 2) {print $1*60 + $2 } else if (NF == 3) {split($1, a, "-");if (a[2] != "" ) {print ((a[1]*24+a[2])*60 + $2) * 60 + $3; } else {print ($1*60 + $2) * 60 + $3;}}}

相关内容

热门资讯

中纪委连打三“虎” 今天(25日),中央纪委国家监委网站连发三份通报。肖杰被开除党籍经中共中央批准,中央纪委国家监委对海...
扎根硬核场景,璇玑动力以全栈自... 2026 世界人工智能大会落地三地四馆,具身智能成为全场核心主线,超 200 家企业同台竞技。展区内...
靠谱大容量TF卡推荐:三星T7... 三星原厂 · 全能微存储新基准 当平板扩容需求激增、Switch游戏掌机需加载多款3A游戏、航拍无人...
买不起大疆、影石的年轻人,排队... 文 | 表外表里 ,作者 | 陈梓洁,编辑 | 杨静、曹宾玲 “一台机器,旺季月入1500。” 去...
美国众议员当街打掉拍摄人员的手... 近日,美国KCCI电视台爆出的一段视频显示,美国众议员扎克·纳恩在街道上与跟踪拍摄人员发生口角,并动...
今天上凯道人数成关键!媒体人示... 海峡导报综合报道 台湾中联油脂致癌油风暴继续延烧,国民党今天(25日)在凯道举办“我是人、我反毒台”...
谷歌公布1500万次AI交互,... 导读:谷歌分析1500万次去标识化AI交互后发现,在一个典型职业中,AI大约可参与21%的任务,但完...
空调水管不出水不制冷 原因可能是空调缺氟或是氟利昂泄漏,可以修补泄漏点,添加适量的氟;原因可能是空调的功率不够,可以更换与...
洗衣机不出水怎样修理拆装 如果您的洗衣机出现不出水的问题,也许是因为以下几个原因:1. 水龙头未开启:在洗衣机不出水的情况下,...
原创 三... 随着REDMI K100系列两杯(Pro/ProMax)的入网,以及一款小米神秘新机,小米在8月份的...