自動化系統中服務監控指令碼的實現思路
阿新 • • 發佈:2019-02-02
背景
在自動化測試系統中加入服務監控的指令碼:如監控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訪問其地址去判斷返回值是否成功即可。