拽拽
管理员组

监控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/shif [ `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 -1HTTP/1.1 200 OK
[root@lamp01 scripts]# curl -I www.jyw1.com 2>/dev/null |head -1HTTP/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/shif [ `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/shif [ "`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/shif [ `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


#1楼
发帖时间:2021-10-28   |   查看数:0   |   回复数:0
游客组