shell awk 检查程序是否执行
来源:互联网 发布:如何发布求购信息淘宝 编辑:程序博客网 时间:2024/06/05 04:05
1.Linux中怎样判断某一进程是不是运行?
2.Linux中怎样倒排序查看,服务器各类进程数?
3.Linux中怎样利用awk检查程序是否执行?
通过shell结合awk可以很好判断某一进程是不是运行,或者某一程序文件是否被执行,下面以php为例来说明一下。
定义一个crontab,每一分钟执行一次,时间间隔为一分钟,可能下一次执行的时候,上次还没有执行完,所以我们要做一下判断。
一、test.php在运行的情况,查看进程
shell 命令
# 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不在运行的情况,如下
shell 命令
# ps -ef |grep test.php
root 30265 7620 0 10:48 pts/0 00:00:00 grep test.php
三、test.sh脚本如下
shell 命令
# 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后,一天差不多,会出现一次这样的情况,
shell 命令
# 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程序卡死,一直没有搞清楚,为什么会这样。
五、解决办法
shell 命令
# 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查看,倒排序查看,服务器各类进程数
shell 命令
# ps -ef| awk '{a[$8]++}END{for(i in a){print i,a[i] | "sort -r -k 2"}}'
2.Linux中怎样倒排序查看,服务器各类进程数?
3.Linux中怎样利用awk检查程序是否执行?
通过shell结合awk可以很好判断某一进程是不是运行,或者某一程序文件是否被执行,下面以php为例来说明一下。
定义一个crontab,每一分钟执行一次,时间间隔为一分钟,可能下一次执行的时候,上次还没有执行完,所以我们要做一下判断。
一、test.php在运行的情况,查看进程
shell 命令
# 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不在运行的情况,如下
shell 命令
# ps -ef |grep test.php
root 30265 7620 0 10:48 pts/0 00:00:00 grep test.php
三、test.sh脚本如下
shell 命令
# 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后,一天差不多,会出现一次这样的情况,
shell 命令
# 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程序卡死,一直没有搞清楚,为什么会这样。
五、解决办法
shell 命令
# 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查看,倒排序查看,服务器各类进程数
shell 命令
# ps -ef| awk '{a[$8]++}END{for(i in a){print i,a[i] | "sort -r -k 2"}}'
0 0
- shell awk 检查程序是否执行
- awk执行shell命令
- awk里面执行shell命令
- shell检查服务是否启动
- shell 检查断口是否启用
- linux的shell命令检测某个java程序是否执行
- linux 检查定时检查程序是否运行
- shell练习之检查一个程序是否运行并给出提示的方法
- awk:base64加密解密,执行shell命令
- awk里面执行shell/系统命令
- shell 脚本监控程序是否正在执行, 如果没有执行, 则自动启动该进程
- shell脚本检查进程是否启动
- shell脚本--检查文件是否存在
- Shell-检查Oracle数据库是否正常
- shell之检查端口服务是否正常
- shell脚本检查服务是否启动脚本
- shell--检查apache是否启动
- 检查软件开发过程执行是否成功?
- c++ vilatile
- android findviewbyId 简化写法
- 自学习Django中遇到的一些问题
- Hadoop上路_14-Hadoop2.3.0的分布式集群搭建
- windows杀掉某端口进程
- shell awk 检查程序是否执行
- hdu5627 Clarke and MST (并查集)
- 和启动Activity有关的Intent标志
- Hadoop上路_12-MapReduce流程演示
- Java string 类型与其他类型的转化(string.valueof())
- Android中最常使用的Context上下文相关总结
- 配置SQL Server ODBC数据源
- Android后台任务队列类库
- 蓝牙手柄按键码