php脚本执行进程30分钟内不退出的话,就kill掉这些php的脚本进程
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,线上脚本内容如下:[root@localhost ~]# cat /data/scripts/check_php.sh#!/bin/bashDate=`date "+%Y-%m-%d %H:%M:%S
千家信息网最后更新 2025年12月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安全错误
数据库的锁怎样保障安全
奥鹏考试网络安全
寒假网络安全工作总结
wep软件开发
网络安全宣传知识手抄报复印
超霸传奇有几个服务器
sql数据库还原低版本
山西it软件开发优选企业
已提交genbank数据库
谷歌服务器被卸载了怎么办
阿里云宝塔数据库进不去
网络安全关于校园贷
技术能手网络安全试题
曲靖互联网科技有哪些
互联网科技税率
微软服务器怎么重装
苏州智慧校园软件开发
现代化法制科普馆软件开发
怎样判断数据库是否符合范式
浙江售后维修管理软件开发
安徽电话网络技术服务收费
西安圣业网络技术
深圳虎为网络技术有限公司
浙江网络技术开发常见问题
丕微数据库
远程桌面开启服务器配置
服务器架构图 工具
关闭数据库前端页面能否打开
各大主流数据库网站
珠海录播服务器品牌
互联网之光 黑科技