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次,这是不合理的,大家别被我这个误导;