linux中shell awk 檢查程式是否執行

來源:互聯網
上載者:User

通過shell結合awk可以很好判斷某一進程是不是運行,或者某一程式檔案是否被執行,下面以php為例來說明一下。

定義一個crontab,每一分鐘執行一次,時間間隔為一分鐘,可能下一次執行的時候,上次還沒有執行完,所以我們要做一下判斷。

1,test.php在啟動並執行情況,查看進程


# ps -ef |grep test.php 
root     29884 29881  0 10:48 ?        00:00:00 awk NR==1{\?if ($8 == "grep"){\?system("cd /home/test/cron && php test.php");\?}else{\?print "running";\?}\?} 
root     29888 29884  0 10:48 ?        00:00:00 sh -c cd /home/test/cron && php test.php 
root     29889 29888  1 10:48 ?        00:00:00 php test.php 
root     30265  7620  0 10:48 pts/0    00:00:00 grep test.php 
2,test.php不在啟動並執行情況,如下
# ps -ef |grep test.php 
root     30265  7620  0 10:48 pts/0    00:00:00 grep test.php 
3,test.sh指令碼如下
查看複製列印?
# cat test.sh 
ps -ef|grep test.php | awk 'NR==1{\
if ($8 == "grep"){\
system("cd /home/test/cron && php test.php");\
}else{\
print "running";\
}\
}' 
 
exit; 
ps -ef|grep test.php,當第8列等於grep的時候,test.php是沒有啟動並執行,system調用php執行test.php,反之在運行。

4,實際啟動並執行情況

執行test.sh後,一天差不多,會出現一次這樣的情況,


# ps -ef |grep test.php 
root      8043  8040  0 09:33 ?        00:00:00 awk NR==1{\?if ($8 == "grep"){\?system("cd /home/test/cron && php test.php");\?}else{\?print "running";\?}\?} 
root      8044  8043  0 09:33 ?        00:00:00 sh -c cd /home/test/cron && php test.php 
root      8045  8044  0 09:33 ?        00:00:00 php test.php 
root     18952 18947  0 Oct14 ?        00:00:00 awk NR==1{\?if ($8 == "grep"){\?system("cd /home/test/cron && php test.php");\?}else{\?print "running";\?}\?} 
root     18954 18952  0 Oct14 ?        00:00:00 sh -c cd /home/test/cron && php test.php 
root     18955 18954  0 Oct14 ?        00:00:01 php test.php 
root     23430 23410  0 10:32 pts/0    00:00:00 grep test.php 

然後導致php程式卡死,一直沒有搞清楚,為什麼會這樣。

5,解決辦法

 

# cat t.sh 
t=0 
eval $(ps -ef |grep test.php |awk 'BEGIN {t = 0;}{if ( $8 == "php"){t++;}}END{print "t="t;}'); 
 
if [ $t -gt 1 ] 
then 
 kill -9 $(ps -ef |grep test.php |awk '{L[NR]=$2;a[NR]=$8;}END{for (i=1;i<=NR;i++){if(a[i] != "grep"){print L[i];}}}'); 
else 
 echo "$t no killing"; 
fi 
 
exit; 
t.sh的意思,每隔一段時間檢查一下,test.php正在被執行的次數,如果大於1,就強行結束掉,所有根test.php有關的進程。
6,awk查看,倒排序查看,伺服器各類進程數
查看複製列印?
# ps -ef| awk '{a[$8]++}END{for(i in a){print i,a[i] | "sort -r -k 2"}}'

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.