码迷,mamicode.com
首页 > 其他好文 > 详细

检查备份,失败发邮件报警

时间:2018-08-09 17:42:24      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:执行   log   efault   bak   awk   exce   $1   gre   mime   

受朋友的激励,在这写下写下点东西

背景:用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提供的模块发邮件,这里就没有改了,思路知道就可以了。

检查备份,失败发邮件报警

标签:执行   log   efault   bak   awk   exce   $1   gre   mime   

原文地址:https://www.cnblogs.com/hs2021/p/9449382.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!