自动化系统中服务监控脚本的实现思路

背景

在自动化测试系统中加入服务监控的脚本:如监控 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

公告通知

自动化运维班、架构师班、区块链正在招生中

各位小伙伴们,欢迎试听和咨询:


自动化系统中服务监控脚本的实现思路_第1张图片
扫码添加小助手微信,备注"公开课,来源",进入分享群

你可能感兴趣的:(自动化系统中服务监控脚本的实现思路)