線上腳本內容以下:
[root@localhost ~]# cat /data/scripts/check_php.sh php
#!/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; } } }
腳本分析以下:bash
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 字符串處理函數,splitless
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中若是是當作字符串輸出的字符,所有用雙引號來引發來。ide
查看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
計算進程運行的分鐘數:code
[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 }}}' 此時數值都爲空
因此此時採用下面的公式計算秒數也爲空:ip
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;}}}