1. 程式人生 > >自動化系統中服務監控指令碼的實現思路

自動化系統中服務監控指令碼的實現思路

背景

在自動化測試系統中加入服務監控的指令碼:如監控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訪問其地址去判斷返回值是否成功即可。