背景
在自动化测试系统中加入服务监控的脚本:如监控 Nginx 服务或 MySQL服务是否开启,如果没有开启,则启动对应服务。
监控思路
通过端口监控
- 在服务器上通过 ss, netstat, lsof 等命令监控
- 在远端通过 telnet, nmap, nc 等方法监控
监控服务进程
ps -ef | grep mysql | wc -l
根据 wget 或 curl 命令对返回值进行判断
连接数据库,根据返回值判断
mysql -uroot -proot -e "select version();" &>/dev/null; echo $?
实现
方案一
通过 ss 命令并过滤进程端口号判断是否开启。
#!/bin/bash
if [ "`ss -lntup | grep 3306 | awk -F "[ :]+" '{print $5}'`" = "3306" ]
then
echo "MySQL status Running."
else
echo "MySQL status Stopped"
/etc/init.d/mysqld start
fi
方案二
通过 lsof 命令过滤端口号并转换成数字判断是否开启。
#!/bin/bash
if [ `lsof -i tcp:3306|wc -l` -gt 0 ]
then
echo "MySQL status Running."
else
echo "MySQL status Stopped"
/etc/init.d/mysqld start
fi
方案三
通过 nmap 远端端口检查。
#!/bin/bash
这行用来判断是否安装了nmap,如果没有则安装
[ `rpm -qa nmap|wc -l` -lt 1 ] && yum install nmap -y &> /dev/null
if [ `nmap 127.0.0.1 -p 3306 2>/dev/null|grep open|wc -l` -gt 0 ]
then
echo "MySQL status Running."
else
echo "MySQL status Stopped"
/etc/init.d/mysqld start
fi
方案四
通过 ps 命令过滤进程来判断。
#!/bin/bash
if [ `ps -ef|grep -v grep|grep mysql|wc -l` -gt 0 ]
then
echo "MySQL status Running."
else
echo "MySQL status Stopped"
/etc/init.d/mysqld start
fi
总结
以上是服务监控脚本的几种常用方法,关键是判断服务是否开启的思路,个人比较倾向于过滤关键字的端口或进程,并转为数字,避免空值。
如果是通过客户端进行模拟,需要事先将程序放到 LNMP 服务器的站点目录,通过 curl 或者 wget 访问其地址去判断返回值是否成功即可。
转载
感谢作者:Boris_Hou
原文链接:http://www.cnblogs.com/borishou/p/8691303.html
公告通知
自动化运维班、架构师班、区块链正在招生中
各位小伙伴们,欢迎试听和咨询: