grep在shell脚本中使用,判断进程是否存在

✍️Auth:star皆空       Date:2021/11/16       Cat:Linux服务器       👁️:1,431 次浏览

在shell中,判断一个进程是否存在,是判断进程数量

1:进程判断

没有运行进程时,如下显示,只有一条,这条就是这条命令的进程。

ubuntu@k8s-node1:~$ ps -ef|grep nginx
ubuntu      7922    4021  3 09:05 pts/0    00:00:00 grep --color=auto nginx

如果进程存在就会显示多条进程信息,其中一条包括命令这条。

ubuntu@k8s-node1:~$ ps -ef|grep nginx
1997        2954    1983  0 08:59 ?        00:00:00 nginx: master process /usr/sbin/nginx -g daemon off;error_log /dev/stdout info; -c /etc/nginx/nginx.conf
1997        2956    2954  0 08:59 ?        00:00:00 nginx: worker process
1997        2957    2954  0 08:59 ?        00:00:00 nginx: worker process
1997        2958    2954  0 08:59 ?        00:00:00 nginx: worker process
1997        2959    2954  0 08:59 ?        00:00:00 nginx: worker process
1997        2960    2954  0 08:59 ?        00:00:00 nginx: worker process
ubuntu      5175    4021  0 09:03 pts/0    00:00:00 grep --color=auto nginx

所以判断是否存在,只要判断数量即可,命令为

ps -ef|grep nginx|wc -l

进程大于1,则进程存在正常,显示如下:

ubuntu@k8s-node1:~$ ps -ef|grep nginx|wc -l
7

2:脚本内容

以下是最简单的判断内容,判断进程数量小于等于1,则进程不存在,然后重启即可。

#!/bin/bash  
#set -x 调试脚本可去掉注释
ProcNumber=$(ps -ef |grep -w nginx|wc -l)
if [ ${ProcNumber} -le 1 ];then  
   systemctl restart nginx #进程不存在,重启服务
fi  

shell判断相关参数:

-eq:等于
-ne:不等于
-le:小于等于
-ge:大于等于
-lt:小于
-gt:大于

需注意的坑:
grep 需要加上参数-w,意为精确匹配。如果不加上-w,判断进程数量会不准确。

例:判断一个名为info.py的脚本内容:ps -ef |grep info.py
不加-w,会把包括info.py都显示出来,如info_pyinfo之类的。所以显示数量远大于实际进程数量。

所以写脚本时必需加上-w参数,显示只有info.py的内容。


grep其他参数参考:

 -e: 使用正则搜索 #常用查找当前目录下所有文件中包含字符串,如”nginx”的文件,会将含有nginx字符串的所有文件匹配出来
 -i: 不区分大小写
 -v: 查找不包含指定内容的行 #常用,反向查询,取反。
 -w: 按单词搜索
 -c: 统计匹配到的次数
 -n: 显示行号 #常与-rn搭配使用
 -r: 逐层遍历目录查找 #常用,将当前文件夹及子文件夹中查找,常与-rn搭配使用查找某字段在文件中的哪一行。
 -A: 显示匹配行及前面多少行, 如: -A3, 则表示显示匹配行及前3行
 -B: 显示匹配行及后面多少行, 如: -B3, 则表示显示匹配行及后3行
 -C: 显示匹配行前后多少行,   如: -C3, 则表示显示批量行前后3行
 --color: 匹配到的内容高亮显示
 --include: 指定匹配的文件类型
 --exclude: 过滤不需要匹配的文件类型

3:定时任务

脚本完成后,需添加系统定时任务。

crontab -e
#添加脚本位置,每分钟执行一次
*/1 * * * * /bin/bash /script/check_nginx.sh
打赏作者

发表评论