成功最有效的方法就是向有经验的人学习!

Shell编程实例-检测Nginx服务是否正常运行

大家好今天给大家带来shell脚本的一个实例(检测Nginx服务是否正常运行)

需求:检测Nginx服务是否正常的运行,如果不在运行那么就启动Nginx服务器,那么如果启动Nginx失败,那么通过邮件报警的方式通知我们;

一、分析

1:监测Nginx服务是否正在运行如下:

[root@yankerp ~]# netstat -anput | grep nginx  
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      27228/nginx: master

使用以上这条命令能够很清楚的看到Nginx正在运行

2:启动Nginx服务器,我们可以通过它的绝对路径去启动Nginx 我的Nginx安装路径为:/usr/local/nginx其中/sbin/下就是Nginx的启动项;

/usr/local/nginx/sbin/nginx

3:如果启动失败,那么就通过邮件报警的方式通知

怎么样可以判断Nginx启动失败,我们可以使用特殊的状态变量$? 如果/usr/local/nginx/sbin/nginx 这条命令运行之后如果启动失败那么它$?就会输出非0的数值表示失败,那么至于邮件报警的方式这里我采用了sendemail

二、编写脚本

开头注释:#!/bin/bash一句话代表着此脚本中的内容是通过bash解析器来运行的

编写脚本的规范 输入时间–创建者的信息–联系邮箱地址–以及版本等等。如下:

#!/bin/bash  
#Date: 17:17 2018-03-04  
#Author: guilin  
#Email: guilin@ct99.cn  
#Function: Nginx monitoring  
#Version: 3.1

2)定义变量

. /etc/init.d/functions   #加载函数库,后面会用到  
RED_COLOR='\E[1;31m'    #定义颜色(红色变量)输出更美观  
RES='\E[0m'             #同上  
NGX=`netstat -anput | grep nginx | wc -l`   #定义检测Nginx是否运行变量 通过wc命令获取行号  
DA=`date +%Y-%m-%d`   #标准的时间输出后面会用到

3)定义函数

接下来就开始写第一个函数了,首先我们写一个获取本机的URL看看是否能够成功http://localhost

function Nginx_URL(){   #定义了监测本地URL函数  
wget --spider -q -o /dev/null --tries=1 -T 5 http://localhost  #安静的输出---/dev/null 这里的wget参数不解释  
if [ "$?" -ne 0 ]   #如果以上wget获取本地的url不等于0 也就是不成功  
   then  #那么  
     action "Nginx pages cannot be obtained_$DA" /bin/false >> /var/log/nginx_url_error.log  
     #输出一条NginxURL检测失败,那么后面调用DA时间变量输出到/var/log/nginx_url_error.log日志中  
fi   #最后fi结束if语句  
}

那么我们在这里想一个问题,那么如果wget获取不到本地的URL 意味着Nginx可能会宕机,那么我们继续写检测Nginx是否运行的函数

function main(){  #定义总函数
        Nginx_URL  #调用NGinxurl函数来测试nginx本地的url是否能够正常运行
        Nginx_server   #调用检测nginx函数 来测试nginx服务器是否正在运行
}
main    #最后结束main函数

function Nginx_server(){	#定义检测Nginx函数
if [ "$NGX" -ne 0 ]		#$NGX这个变量的运行结果不等于0 非0代表正在运行
   then	#那么
     echo -en "${RED_COLOR} Nginx is running!\n${RES}"	#就输出Nginx is running 信息;
   else		#否则启动NGINX
     /usr/local/nginx/sbin/nginx 
fi
        if [ "$?" -ne 0 ];then 注意:在这里需要提前安装好sendemail邮件报警 可以参考我之前的文章这里不在演示
           /usr/local/bin/sendEmail -f guilin@ct99.cn -t guilin@ct99.cn -s smtp.xx.com -u "Nginx alarm" -o message-content-type=html -o message-charset-utf8 -xu yankerpcs -xp 123456yk -m "Nginx has serious downtime" &>/dev/null
        fi
}

最后我们定义了两个函数同时检测Nginx的状态情况,最后我们需要定义总函数来调用以上函数进行最后的测试

function main(){  #定义总函数  
        Nginx_URL  #调用NGinxurl函数来测试nginx本地的url是否能够正常运行  
        Nginx_server   #调用检测nginx函数 来测试nginx服务器是否正在运行  
}  
main    #最后结束main函数。

三、结尾:

经过了上面的几种操作,我们已经知道了Nginx的各种判断来确定Nginx的运行状况,同时我们也设置了邮件报警的机制来发送报警消息给运维人员。那么最后的脚本如下:

#!/bin/bash
#Date: 17:17 2018-03-04
#Author: yankai
#Email: ywyankerp@163.com
#Function: Nginx monitoring
#Version: 3.1
. /etc/init.d/functions
RED_COLOR='\E[1;31m'
RES='\E[0m' 
NGX=`netstat -anput | grep nginx | wc -l`
DA=`date +%Y-%m-%d`

function Nginx_URL(){
wget --spider -q -o /dev/null --tries=1 -T 5 http://localhost
if [ "$?" -ne 0 ]
   then
     action "Nginx pages cannot be obtained_$DA" /bin/false >> /var/log/nginx_url_error.log
fi
}

function Nginx_server(){
if [ "$NGX" -ne 0 ]
   then
     echo -en "${RED_COLOR} Nginx is running!\n${RES}"
   else
     /usr/local/nginx/sbin/nginx 
fi
        if [ "$?" -ne 0 ];then
           /usr/local/bin/sendEmail -f yankerpcs@163.com -t ywyankerp@163.com -s smtp.163.com -u "Nginx alarm" -o message-content-type=html -o message-charset-utf8 -xu yankerpcs -xp 123456yk -m "Nginx has serious downtime" &>/dev/null
        fi
}

function main(){
        Nginx_URL
        Nginx_server
}
main

运行测试如下:

Shell编程实例-检测Nginx服务是否正常运行

Shell编程实例-检测Nginx服务是否正常运行


当我们Nginx正在运行的时候我们发现它输出了Nginx is running 说明我们定义函数生效了。

2:那我们把Nginx关闭在运行脚本测试如下:

Shell编程实例-检测Nginx服务是否正常运行

Shell编程实例-检测Nginx服务是否正常运行


3:模仿/usr/local/nginx/sbin/nginx启动出错 测试邮件是否发送…..

Shell编程实例-检测Nginx服务是否正常运行

Shell编程实例-检测Nginx服务是否正常运行


邮件查收:

Shell编程实例-检测Nginx服务是否正常运行

Shell编程实例-检测Nginx服务是否正常运行


最后我们要把此脚本添加到计划任务运行,在这里不在做演示! 上面的Nginx启动报错大家可以自己想办法让它启动失败,这里不在做演示。

赞(0) 打赏
未经允许不得转载:陈桂林博客 » Shell编程实例-检测Nginx服务是否正常运行
分享到

大佬们的评论 抢沙发

全新“一站式”建站,高质量、高售后的一条龙服务

微信 抖音 支付宝 百度 头条 快手全平台打通信息流

橙子建站.极速智能建站8折购买虚拟主机

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册