shell awk 检查程序是否执行
2018-07-13 08:58:14来源:编程学习网 阅读 ()
通过shell结合awk可以很好判断某一进程是不是运行,或者某一程序文件是否被执行,下面以php为例来说明一下。
定义一个crontab,每一分钟执行一次,时间间隔为一分钟,可能下一次执行的时候,上次还没有执行完,所以我们要做一下判断。
一、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
二、test.php不在运行的情况,如下
# ps -ef |grep test.php root 30265 7620 0 10:48 pts/0 00:00:00 grep test.php
三、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,反之在运行。
四、实际运行的情况
执行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程序卡死,一直没有搞清楚,为什么会这样。
五、解决办法
# 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有关的进程。
六、awk查看,倒排序查看,服务器各类进程数
# ps -ef| awk '{a[$8]++}END{for(i in a){print i,a[i] | "sort -r -k 2"}}'
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Centos7下crontab+shell脚本定期自动删除文件 2018-11-22
- Shell脚本编程30分钟入门 2018-07-13
- Shell脚本编程总结及速查手册 2018-07-13
- linux 定时清理文件脚本 shell 2018-07-13
- 常用Linux shell命令汇总,总有一条你需要 2018-07-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash