大家好今天给大家带来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启动失败,我们可以使用特殊的状态变量 ?  如果 / u s r / l o c a l / n g i n x / s b i n / n g i n x  这条命令运行之后如果启动失败那么它 ? 如果/usr/local/nginx/sbin/nginx 这条命令运行之后如果启动失败那么它 ? 如果/usr/local/nginx/sbin/nginx 这条命令运行之后如果启动失败那么它?就会输出非0的数值表示失败,那么至于邮件报警的方式这里我采用了sendemail

二、编写脚本

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

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

#!/bin/bash
#Date: 17:17 2018-03-04
#Author: yankai
#Email: ywyankerp@163.com
#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 [ “KaTeX parse error: Expected 'EOF', got '#' at position 12: ?" -ne 0 ] #̲如果以上wget获取本地的ur…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 [ "KaTeX parse error: Expected 'EOF', got '#' at position 15: NGX" -ne 0 ] #̲NGX这个变量的运行结果不等于0 非0代表正在运行
then #那么
echo -en “KaTeX parse error: Undefined control sequence: \n at position 30: …inx 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 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
}

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

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

三、结尾:

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

#!/bin/bash

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数软件测试工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上软件测试开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

b (备注软件测试)**
[外链图片转存中…(img-nRIewEIi-1713039305032)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐