检查备份,失败发邮件报警
Posted hs2021
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检查备份,失败发邮件报警相关的知识,希望对你有一定的参考价值。
受朋友的激励,在这写下写下点东西
背景:用shell做的全备,但是可能存在备份失败的情况,所以检查备份(通过检查备份的方式),如果看到有错误就发邮件报警。
备份代码写的很烂,贴上:
#!/bin/sh # DFILE=$1 SOCK=$2 DB_NAME=$3 DB_USER="mysqlbak" DB_PASS="***" BCK_DIR="/var/backup/$DB_NAME" FNAME=`date +%Y%m%d_%H%M%S` HOST=`ip r|grep src|awk ‘{print $9}‘` LOGFILE="$BCK_DIR/backup.log" log() { echo "$FNAME $HOST $1" >> $LOGFILE } if [ ! -e $BCK_DIR ];then mkdir -p $BCK_DIR if [ $? -ne 0 ];then log "mkdir $BCK_DIR failure." exit 2 fi fi log "Start full backup..." innobackupex --defaults-file=$DFILE --user=$DB_USER --password=$DB_PASS --socket=$SOCK --parallel=4 --no-timestamp $BCK_DIR/$FNA ME if [ $? -eq 0 ];then log "Today‘s full backup successful." log "Start compress backup file." cd $BCK_DIR tar cf - $FNAME | pigz -p 4 > $FNAME.tar.gz if [ $? -eq 0 ];then rm -rf $FNAME log "compress backup file successful." find $BCK_DIR/ -mtime +20 rm -rf {} ; else log "compress backup file failure." fi else log "Today‘s full backup failure." fi find $BCK_DIR/ -type f -mtime +20 -delete
检查脚本贴上:
#!/usr/bin/env python3 # -*- coding:utf-8 -*- import os import smtplib from email.mime.text import MIMEText from email.utils import formataddr def checkLog(date): logFile = ‘/var/backup/backup.log‘ if not os.path.exists(logFile): print("log not exist") global Host,Date Host=Date=None with open(logFile,‘r‘) as fd: lines = fd.readlines() for line in lines: if date in line: if ‘failure‘ and ‘full‘ in line: Host=line.split()[0] Date=line.split()[1] elif ‘failure‘ and ‘compress‘ in line: Host=line.split()[0] Date=line.split()[1] if Host == None: print("%s backup not exist"%date) else: ret = mail(Host,Date) if ret: print("sendmail success") else: print("sendmail failed") def mail(Host,Date): msgFrom = ‘***@163.com‘ # 发件人邮箱账号 msgPasswd = ‘***‘ # 发件人邮箱授权码 msgTo = ‘***‘ # 收件人邮箱账号 msgCo = ‘‘ # 抄送邮箱账号 ret = True msg = MIMEText("备份失败"+ Host + Date, ‘plain‘, ‘utf-8‘) msg[‘From‘] = formataddr(["hushi", msgFrom]) # 括号里的对应发件人邮箱昵称、发件人邮箱账号 msg[‘To‘] = formataddr(["dba", msgTo]) # 括号里的对应收件人邮箱昵称、收件人邮箱账号 msg[‘Subject‘] = "【报警】" # 邮件的主题,也可以说是标题 try: server = smtplib.SMTP_SSL("smtp.163.com", 465) # 发件人邮箱中的SMTP服务器,端口是25 server.login(msgFrom, msgPasswd) # 括号中对应的是发件人邮箱账号、邮箱密码 server.sendmail(msgFrom, msgTo.split(‘,‘)+ msgCo.split(‘,‘),msg.as_string()) server.quit() # 关闭连接 except Exception: # 如果 try 中的语句没有执行,则会执行下面的 ret=False ret = False return ret checkLog(‘20180805‘)
逻辑:这个检查脚本传入一个日期参数,会去一行行读日志文件,看到相应的日期,然后再去判断。如果检测到failure就是失败了,就去发邮件,没有检测到failure就是成功了,就不管。
报警的内容格式这一块儿可以调调,因为到时候要写进平台里,直接通过django提供的模块发邮件,这里就没有改了,思路知道就可以了。
以上是关于检查备份,失败发邮件报警的主要内容,如果未能解决你的问题,请参考以下文章
#题目:有10 台被监控主机一台监控机,在监控机上编写脚本,一旦某台被监控机器/ 分区适用率大于80%, 就发邮件报警放到crontab 里面, 每10 分钟检查一次