Hiccup
发布于 2023-08-21 / 46 阅读
0
0

FTP一次备份预警脚本

FTP一次备份预警脚本

注:对既有的FTP一次备份脚本追加脚本程序,进行校验和邮件警报;

1. 预警范围

  • 根据关键字匹配文件,文件数量小于1,则邮件警报;

  • 在FTP备份过程中,若网络中断、或FTP服务器停掉,则邮件警报;

2. Linux 服务器 Mail 配置

2.1. 是否安装 Mailx

rpm -qa |grep mailx
# 若无输出,则手动安装:
yum install mailx 

2.2. 配置邮箱参数

执行命令: vim /etc/mail.rc

set from="***@**.com"
set smtp="smtp.**.com"
set smtp-auth-user="***@**.com"
set smtp-auth-password=******
set smtp-auth=login

注意

(1)在linux服务器上执行 ping smtp.***.com ,若是企业邮箱,则需寻找本公司TI进下解决,若是个人正常检查下防火墙和安全规则;

(2)关掉阿里云企业邮箱的 三方客户端安全密码;(个人如果使用QQ邮箱的可以忽略)

(3)smtp-auth-password使用正常登录的密码即可,不需要授权码;(QQ邮箱、网易云邮箱,都是需要获取授权码的)

配置完成后,可以用此语句 echo "邮件正文" | mail -s "邮件主题" ****@**.com 进行测试;

3. FTP备份脚本修改

原备份脚本:

#!/bin/bash

date_str=$(date +%Y%m%d)

cd /home/backups/data

find * -mtime +5 -exec rm \{} \;

mysqldump -u username --password=passwd dbname > dbname_$date_str.sql

ftp -n<<!
open remote_ip
user username password
binary
prompt
mput *$date_str*
close
bye
!

改造如下:

#!/bin/bash

date_str=$(date +%Y%m%d)
cd /home/backups/data

# -------------------追加内容1 start---------------------
search_path="/home/backups/data"
# 配置邮件收件人
mail_recipients=("***@***.com" "***@***.com")
# 获取当前日期
current_date=$(date '+%Y年%m月%d日')
# 拼接文件名
log_file_name="log_$current_date.log"
file_name=`date '+%Y年%m月%d日'`"一次备份异常详情.txt"
# 创建日志文件
touch "$log_file_name"
# 追加内容
echo -e "Dear All:\n" > $file_name
# -------------------追加内容1 end----------------------


find * -mtime +5 -exec rm \{} \;
mysqldump -u username --password=passwd dbname > dbname_$date_str.sql

# 追加内容2: 添加输出 > $log_file_name
ftp -n<<! > $log_file_name
open remote_ip
user username password
binary
prompt
mput *$date_str*
close
bye
!


# -------------------追加内容3 start---------------------
# 在搜索路径中搜索并计数
count=$(find "$search_path" -type f -name "*$date_str*" | wc -l)

if [ $count -lt 1 ] ; then 
  echo -e "Error:备份文件不存在 \n" >> $file_name 
fi

if grep -q "Not connected" "$log_file_name"; then 
  echo -e "Error:备份出现网络异常 \n" >> $file_name 
fi

if grep -q "Error" "$file_name"; then 
  ifconfig -a | grep -w inet | grep -v 127.0.0.1 | grep -v inet6 | awk '{print $2}' | tr -d "addr:" >> $file_name
  # 发送邮件
  for mail_recipient in ${mail_recipients[@]} ; do 
    echo "Dear all: 详情请见附件" | mail -s "一次备份异常警告-$current_date" ${mail_recipient} < $file_name
  done
fi

# -------------------追加内容3 end----------------------

4. 关于脚本的放置

正常来说,一次备份后的文件校验,应该放在FTP服务器上校验才对......

我这个是放在备份服务器上的,意味着有100台需备份的应用或数据库服务器,就得配100次,这是不合理的,大家别被我这个误导;


评论