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

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

以上是关于检查备份,失败发邮件报警的主要内容,如果未能解决你的问题,请参考以下文章

azkaban(七):邮件报警

shell 实现检查内存报警

#题目:有10 台被监控主机一台监控机,在监控机上编写脚本,一旦某台被监控机器/ 分区适用率大于80%, 就发邮件报警放到crontab 里面, 每10 分钟检查一次

Zabbix实战之故障处理篇Zabbix的告警邮件发送失败问题处理

linux 邮件报警,监控内存cup

zabbix4.2通过163邮箱发邮件报警