監控MySQL或Web服務是否正常


  在工作中,我們往往利用腳本定時監控本地、遠端數據庫服務端或Web服務是否運行正常,例如:負載高、cup高、連接數滿了等....

方法一:根據端口

 本地:netstat/ss/lsof

①   netstat –lntup|grep 3306|wc –l

②   ss –lntup|grep 3306|wc -l

③   lsof –I :3306|grep mysql|wc –l

  遠程:telnet/nmap/nc

①echo -e "\n"|telnet baidu.com 80|grep Connected|wc

②namp www.baidu.com -p 80|grep open|wc-l

方法二:根據進程

ps -ef|grep mysql|wc -l

wget/curl (http方式,判斷根據返回值或返回內容)

header(http)根據狀態碼判斷

數據庫特有,通過mysql客戶端連接,根據返回值或返回內存判斷。

測試:以mysql為例(端口)

本地:

vim bqh.sh

#!/bin/sh
if [ `lsof -i tcp:3306|wc -l` -gt 0 ]
      then
    echo "MySQL is Running."
else
   echo "MySQL is Stopped."
   /etc/init.d/mysqld start
   echo "MySQL is Starting......"
fi

執行腳本后效果如下:

當然我們還可以用其它命令方法檢測:

[root@lamp01 scripts]# vim bqh.sh 

#!/bin/sh
#if [ `lsof -i tcp:3306|wc -l` -gt 0 ]
#if [ `ps -ef|grep mysql|grep -v grep|wc -l` -gt 0 ] #注意腳本名字不能帶mysql,自己也算進程
#if [ `netstat -lntup|grep mysql|wc -l` -gt 0 ] 
if [ "`netstat -lnt|grep 3306|awk -F "[ :]+" '{print $5}'`" = "3306" ]
    then
    echo "MySQL is Running."
else
   echo "MySQL is Stopped."
   /etc/init.d/mysqld start
   echo "MySQL is Starting......"
fi

注意:

如果mysql沒啟動,空值-eq 3306 會報錯,如果以字符串的方式比較不會。

遠程:

腳本如下:

vim jkmysql.sh

#!/bin/sh
#remote
#if [ `nc -w 2  192.168.43.118 3306 &>/null&&echo ok|wc -l` -gt 0 ]
if [ `nmap 192.168.43.118 -p 3306 2>/dev/null|grep open|wc -l` -gt 0 ]
    then
  echo "MySQL is Running..."
else
  echo "MySQL is Stopped."
  ssh -p22 root@192.168.43.118 "/etc/init.d/mysqld start" #此處需要做免密交互遠程登錄執行命令,https://www.cnblogs.com/su-root/p/10128237.html
  echo "MySQL is Starting......"
fi

我們在192.168.43.117機器上執行上面的腳本:

我們現在在192.168.43.118機器上把mysql服務關閉,然后再在192.168.43.117機器上執行腳本:

==========================華麗的分割線=================================

測試:以web為例

首先我們先啟動nginx服務:

[root@lamp01 scripts]# /application/nginx/sbin/nginx
[root@lamp01 scripts]# curl -I -s www.jyw1.com|head -1
HTTP/1.1 200 OK
[root@lamp01 scripts]# curl -I www.jyw1.com 2>/dev/null |head -1
HTTP/1.1 200 OK
[root@lamp01 scripts]# 

curl -I -s www.jyw1.com|head -1 等價於 curl -I www.jyw1.com 2>/dev/null |head -1

腳本如下:

vim web.sh 

#!bin/sh
if [ `curl -I -s www.jyw1.com|head -1|egrep "200"|wc -l` -eq 1 ]
 then
  echo "httpd is Running..."
else
  echo "httpd is Stopped!"
  /application/nginx/sbin/nginx
  echo "please wait..."
  echo "httpd is Runing......"
fi

當然我們還可以用其它命令方法檢測:

腳本如下:

#!/bin/sh
if [ "`curl -s www.jyw1.com &>/dev/null&&echo $?`" = "0" ]  
 then
  echo "Httpd is Running..."
else
  echo "Httpd is Stoped..."
  /application/nginx/sbin/nginx
  echo "please wait..."
  echo "httpd is Runing......"
fi

我們也可以監控nginx服務是否開啟(進程或端口等方式)

腳本如下:

vim web2.sh

#!/bin/sh
if [ `ps -ef|grep nginx|wc -l` -ge 2  ]
 then
  echo "Httpd is Running... "
else
  echo "Httpd is Stoped..."
  /application/nginx/sbin/nginx
  echo "please wait..."
   sleep 1
  echo "Httpd is Running..."
fi  

其他方法:

echo $? #等於0

lsof -i :端口號|wc -l  #大於等於1

nmap ip地址 -p 端口|grep open|wc -l #等於1

wget --spider --timeout=10 --tries=2 ip地址 &>/dev/null #返回值等於0

curl -I -s -w "%{http_code}" -o /dev/null ip地址 #等於200


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM