监控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。