zoukankan      html  css  js  c++  java
  • 监控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 " "|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

  • 相关阅读:
    swift 设置图片动画组 iOS11之前 默认图片 设置不成功
    iOS 管理库 Carthage 安装以及使用
    OC 和 swift 冒泡排序
    swift中UITextView的使用
    图片拉伸
    swift
    label文字从左上角开始
    2017最新总结CocoaPods安装细节及遇到的问题
    苹果 重置APPID密保问题及更新开发者协议
    xcode
  • 原文地址:https://www.cnblogs.com/su-root/p/10409973.html
Copyright © 2011-2022 走看看