千家信息网

php脚本执行进程30分钟内不退出的话,就kill掉这些php的脚本进程

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,线上脚本内容如下:[root@localhost ~]# cat /data/scripts/check_php.sh#!/bin/bashDate=`date "+%Y-%m-%d %H:%M:%S
千家信息网最后更新 2025年02月04日php脚本执行进程30分钟内不退出的话,就kill掉这些php的脚本进程

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

#!/bin/bashDate=`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.logelse  for i in $Pid    do        echo "$Date Running Process $i"   >> /data/scripts/check_php.log ##define Get Seconds varSec=$(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    donefiecho '===========================' >> /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 0614046

awk 字符串处理函数,split

split(s,a,fs)    以fs为分割符 将s字符串分成序列asplit可以实现对字符串进行数组类型的分割,下面用例子来说明下。[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]=aa[2]=ba[3]=ca[4]=da[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 greproot      5493  5490  0 9月18 ?       00:00:00 /bin/bash /data/cron/chksh/setcache.shroot      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;}}}
脚本 字符 运行 字符串 数组 进程 公式 时间 面的 输出 例子 内容 函数 分隔符 名称 实际 小时 序列 引号 形式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库生动解释 系统安全和网络安全的就业前景 智能网络安全监控系统 咪咕视讯软件开发待遇 青岛学习软件开发哪个学校好 手机移动端链接数据库 保定廊坊用友网络技术 数据库主键和外键的定义 地下城域名服务器有什么作用 我的世界开一个服务器都要做什么 奉贤区网络视频系统服务器 政府软件开发的服务机构 函数公式匹配相同数据库 医学软件开发 人民网股票有网络安全概念吗 各家云数据库技术对比 软通动力网络技术 数控加工中心数据库配置 选计算机网络技术的原因 互联网医疗科技红利 广州炎阳软件开发怎么样 图数据库与mysql 中学网络安全和信息化领导小组 北京打造互联网科技有限公司 上海数据库技术及应用的试题 2020网络安全周是哪一周 长春正规网络技术咨询参考价格 郑州计算机软件开发价钱 红鸟软件开发公司 pb9打开数据库闪退
0