监控mysql状态脚本

监控mysql状态, 发现宕后, 自动重启, 每秒检查一次。

check.sh

#!/bin/bash
while [ true ]; do
/bin/sleep 1
sh mysql_status.sh
done

chengkill

#!/bin/sh
#pid kill thread for chenglee
#if fileformat=dos, update fileformat=unix
#code:set fileformat=unix
#check:set ff ?
if [ $# -lt 1 ]
then
  echo "not procedure_name"
  exit 1
fi
  
PROCESS=`ps -ef|grep $1|grep -v grep|grep -v PPID|awk '{ print $2}'`
for i in $PROCESS
do
  echo "Kill the $1 process [ $i ]"
  kill -9 $i
done

chengkill授执行权扔/usr/bin

mysql_status.sh

#!/bin/bash  
#/usr/bin/nmap localhost | grep 3306  
#lsof -i:3306  
MYSQLPORT=`netstat -tlnp | grep "3306"|awk -F[:" "]+ '{print $4}'`  
STR_TIME=$ date "+%Y-%m-%d %H:%M:%S"
 
function checkMysqlStatus(){  
    /usr/bin/mysql -uroot -plizhenghua --connect_timeout=5 -e "show databases;" &>/dev/null 2>&1  
    if [ $? -ne 0 ]  
    then  
        restartMysqlService  
        if [ "$MYSQLPORT" == "3306" ];then  
            echo "mysql restart successful......"   
        else  
            echo "mysql restart failure......"   
            python mail.py 
        fi  
    else
        echo "mysql is running..."  
    fi  
}  
  
function restartMysqlService(){  
    cat code.txt
    echo "测试重启mysql服务!"
    echo "清除mysql残余!"
    chengkill mysqld
    echo "准备重启!"
    service mysqld restart
    echo "重启成功!"
#    python mail.py
}  
  
if [ "$MYSQLPORT" == "3306" ]  
then  
    checkMysqlStatus  
else  
    restartMysqlService  
fi

mail.py

#!/usr/bin/python
#-*- coding:utf-8 -*-
#Python Mail for chenglee
#if fileformat=dos, update fileformat=unix
#code:set fileformat=unix
#check:set ff ?
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr

my_sender='11318@qq.com'    # 发件人邮箱账号
my_pass = 'mwbajizijah'              # 发件人邮箱密码(当时申请smtp给的口令)
my_user='14783@qq.com'      # 收件人邮箱账号,我这边发送给自己
my_content='系统管理员您好,该系统的mysql进程已经崩溃并重启失败,请手动重启!!'
my_title='进程告警'
def mail():
    ret=True
    try:
        msg=MIMEText(my_content,'plain','utf-8')
        msg['From']=formataddr(["发件人昵称",my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
        msg['To']=formataddr(["收件人昵称",my_user])              # 括号里的对应收件人邮箱昵称、收件人邮箱账号
        msg['Subject']=my_title                # 邮件的主题,也可以说是标题

        server=smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器,端口是465
        server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
        server.sendmail(my_sender,[my_user,],msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
        server.quit()# 关闭连接
    except Exception:# 如果 try 中的语句没有执行,则会执行下面的 ret=False
        ret=False
    return ret

ret=mail()
if ret:
    print("邮件发送成功")
else:
    print("邮件发送失败")

code.txt

/
   /   /   / 
   ____,____  / 
  //  |ヽヽ  \  / 
 ^^^^^|^^^^^^^ 
/    | ∩,,∩ /  / 
     |(*(T)*) 
  /   0と  )  / 
       し─ J
        chenglee

前后两个放在同一个目录, 中间chengkill扔bin, 然后守护模式运行check.sh。

原文地址:https://www.cnblogs.com/chenglee/p/8378446.html