Linux 实用小脚本6(检测nginx服务,如果服务未运行,自动启动服务)

  Linux 实用小脚本6(检测nginx服务,如果服务未运行,自动启动服务)

#!/biu/bash
#!author zsk_john
#count=`ps -ef|grep nginx|grep -v grep|grep -v $0|wc -l`
count=`/sbin/pidof nginx | wc -l`
echo $count
if [ $count -eq 0 ];then
echo -e "\033[40;31m start nginx process.....\033[0m"
service nginx restart
else
echo -e "\033[40;32m nginx is runing.....\033[0m"
fi

脚本内容解释:

count=`ps -ef|grep nginx|grep -v grep|grep -v $0|wc -l` 反引号表示返回命令的值。

count=`/sbin/pidof nginx | wc -l` 和上面的是一致的,但不需要grep检索过滤了。任选一个使用即可。

其中,grep -v grep是去掉查询出的结果集内的grep程序。示例:

[root@centos8 ~]# ps -ef |grep nginx |grep -v grep
root      3104     1  0 21:03 ?        00:00:00 nginx: master process /www/server/nginx/sbin/nginx -c /www/server/nginx/conf/nginx.conf
www       3105  3104  0 21:03 ?        00:00:00 nginx: worker process
www       3106  3104  0 21:03 ?        00:00:00 nginx: worker process
www       3107  3104  0 21:03 ?        00:00:00 nginx: worker process
www       3108  3104  0 21:03 ?        00:00:00 nginx: worker process
www       3109  3104  0 21:03 ?        00:00:00 nginx: cache manager process
[root@centos8 ~]# ps -ef |grep nginx 
root      3104     1  0 21:03 ?        00:00:00 nginx: master process /www/server/nginx/sbin/nginx -c /www/server/nginx/conf/nginx.conf
www       3105  3104  0 21:03 ?        00:00:00 nginx: worker process
www       3106  3104  0 21:03 ?        00:00:00 nginx: worker process
www       3107  3104  0 21:03 ?        00:00:00 nginx: worker process
www       3108  3104  0 21:03 ?        00:00:00 nginx: worker process
www       3109  3104  0 21:03 ?        00:00:00 nginx: cache manager process
root      3658  1577  0 21:12 pts/1    00:00:00 grep --color=auto nginx

可以看到,最后一行的内容不是nginx的进程,只是grep命令的进程。这一行是不需要的干扰项, 所以 grep -v了。

grep -v $0 这个也是排除干扰,$0 代表脚本文件名称,如果脚本名称带有nginx,那么,运行脚本的时候会多检索出两个含有nginx的进程,这个不太好检测出来(脚本运行完了,那两个进程也就自己结束了,无法直观的观察到),不过,echo $count这一行可以看出是取出变量值有问题的,如果没有这个排除项的话。(脚本名称包含需要检测的服务和不包含需要检测的服务,运行后,变量值是不一样的,一般是多2,这里比较饶舌,需要静心理解)。

因此,grep -v $0是必须有的,不信的同学可以将该项去掉,观察 echo $count所取出的变量值。

前面排除了所有干扰,那么,检索到了nginx的进程列就表示nginx是启动的状态。


if [ $count -eq 0 ];then
echo -e "\033[40;31m start nginx process.....\033[0m"
service nginx restart

该变量值范围可以限定为0和非0,0代表未检索到nginx的进程列,也就是说nginx未启动,脚本内直接执行nginx的启动命令即可。


else
echo -e "\033[40;32m nginx is runing.....\033[0m"
fi

非零的情况下,nginx已经是启动的,无需任何动作,打印提示nginx 正在运行即可。fi是if语句的结束。

总结:

当然了,其他的服务检测也是这一个模式,进程名称换掉,启动服务的命令换掉即可。或者,别的脚本大体形式改变,改为for循环或者while循环,但意义并不大,细节方面还是if语句判断作为服务状态的检测,只是可能不是通过查询进程,而是通过服务本身的状态查询命令而已。


 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚风_END

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值