php脚本执行进程30分钟内不退出的话,就kill掉这些php的脚本进程
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,线上脚本内容如下:[root@localhost ~]# cat /data/scripts/check_php.sh#!/bin/bashDate=`date "+%Y-%m-%d %H:%M:%S
千家信息网最后更新 2026年11月03日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 0614046awk 字符串处理函数,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安全错误
数据库的锁怎样保障安全
咖啡网
互联网的科技
科技互联网龙头
互联网科技公司税收优惠
互联网金融 科技
奇酷互联网络科技
华中科技大学互联网
睿民互联网科技
海南科技产业互联网平台
阿里互联网科技公司
互联网科技扶贫时间
国大互联网教育科技有限公司薪资
互联网科技快讯热点
互联网安防科技感
扫呗互联网科技有限公司
广州梦谷互联网科技有限公司领导
全球科技与互联网公司市值变化
盐城市攀科互联网科技有限公司
科技互联网专业工作会议发言稿
优雇互联网科技有限公司
火传媒上海互联网科技
成都狮子座互联网科技
卓越科技互联网 招聘
顺网科技2021年互联网排名
互联网巨头投资的硬核科技
互联网企业和科技型企业
坤平互联网科技
深圳市优智互联网科技有限公司
科技赋能视角下互联网保险发展
互联网风格科技公司名称