定期备份配置文件
需求分析
- 根据等保要求,需要定期备份中间件等配置文件;
- 备份文件要求,每天备份一次且同步至异地主机;
- 错误发送要求,备份脚本出现错误时第一时间发送邮件;
编写脚本
#!/bin/bash
SOURCE_DIR="/usr/local/tomcat-6.0.44/conf/"
SOURCE_SOFTWARE_NAME="tomcat"
SOURCE_TEMP_DIR="/tmp/$SOURCE_SOFTWARE_NAME"
LOG_FILES="/tmp/$SOURCE_SOFTWARE_NAME-logs"
OBJECTIVE_HOST="192.168.108.131"
OBJECTIVE_ACCOUNT="root"
OBJECTIVE_PASSWOED="cmk521"
OBJECTIVE_DIR="/data/config/tomcat/"
DATE_TIME=$(date +%F)
TIME_TIME=$(date +%F-%H-%M-%S)
LOCAL_HOST_IP=$(ip addr | grep inet | grep brd | awk -F " " '{print $2}' | awk -F "/" '{print $1}')
mkdir -p $SOURCE_TEMP_DIR
mkdir -p $LOG_FILES
INSTALL_RSYNC () {
yum -y install rsync > /dev/null 2>&1
}
rpm -qa | grep rsync > /dev/null 2>&1
if [[ $? == 0 ]]; then
echo "rsync已安装"
else
INSTALL_RSYNC
fi
INSTALL_SSHPASS () {
yum -y install sshpass > /dev/null 2>&1
}
rpm -qa | grep sshpass > /dev/null 2>&1
if [[ $? == 0 ]]; then
echo "sshpass已安装"
else
INSTALL_SSHPASS
fi
CONFIG_MAILX () {
MAIL_FILE=$(find / -name mail.rc)
cp $MAIL_FILE $MAIL_FILE.bak
cat >> $MAIL_FILE << EOF
#邮箱配置文件
set from=15515190288@163.com
set smtp=smtp.163.com
set smtp-auth-user=15515190288@163.com
# smtp-auth-password表示我邮箱的第三方客户端授权码
set smtp-auth-password=FWLQDVXFHHQFYAGW
set smtp-auth=login
EOF
}
INSTALL_MAILX () {
yum -y install mailx postfix sendmail > /dev/null 2>&1
}
rpm -qa | grep mailx > /dev/null 2>&1 && rpm -qa | grep postfix > /dev/null 2>&1 && rpm -qa | grep sendmail > /dev/null 2>&1
if [[ $? == 0 ]]; then
echo "mailx postfix sendmail 已安装"
else
INSTALL_MAILX
CONFIG_MAILX
fi
SEND_ERROR () {
EMAIL_SUBJECT="$SOURCE_SOFTWARE_NAME 配置文件告警"
EMAIL_CONTENT="$EMAIL_MESSAGE"
EMAIL_RECIPIENT="15515190288@163.com"
EMAIL_FORWARD="1121935967@qq.com,15515190288@163.com"
echo $EMAIL_CONTENT | mail -s $EMAIL_SUBJECT $EMAIL_RECIPIENT -c $EMAIL_FORWARD
}
ping -c 10 $OBJECTIVE_HOST > /dev/null 2>&1
if [[ $? == 0 ]]; then
echo "目的主机 $OBJECTIVE_HOST 网络正常"
else
echo "目的主机 $OBJECTIVE_HOST 网络异常,退出脚本"
SEND_ERROR
exit
fi
tar -czvf $SOURCE_TEMP_DIR/$SOURCE_SOFTWARE_NAME-$LOCAL_HOST_IP-$DATE_TIME.tgz $SOURCE_DIR > $LOG_FILES/tar-$TIME_TIME.log
if [[ $? == 0 ]]; then
echo "$SOURCE_SOFTWARE_NAME 本地打包完成"
else
EMAIL_MESSAGE="$SOURCE_SOFTWARE_NAME 本地打包失败,退出脚本"
SEND_ERROR
exit
fi
sshpass -p $OBJECTIVE_PASSWOED rsync -avp $SOURCE_TEMP_DIR/*.tgz $OBJECTIVE_ACCOUNT@$OBJECTIVE_HOST:$OBJECTIVE_DIR/ > $LOG_FILES/rsync-$TIME_TIME.log
if [[ $? == 0 ]]; then
echo "$SOURCE_SOFTWARE_NAME 同步至 $OBJECTIVE_HOST 完成"
else
EMAIL_MESSAGE="$SOURCE_SOFTWARE_NAME 同步失败,退出脚本"
SEND_ERROR
exit
fi
find $SOURCE_TEMP_DIR -name *.tgz -mtime +5 -type f | xargs rm > /dev/null 2>&1
脚本使用
- 注意调整变量信息
SOURCE_DIR="/usr/local/tomcat-6.0.44/conf/"
SOURCE_SOFTWARE_NAME="tomcat"
SOURCE_TEMP_DIR="/tmp/$SOURCE_SOFTWARE_NAME"
LOG_FILES="/tmp/$SOURCE_SOFTWARE_NAME-logs"
OBJECTIVE_HOST="192.168.108.131"
OBJECTIVE_ACCOUNT="root"
OBJECTIVE_PASSWOED="cmk521"
OBJECTIVE_DIR="/data/config/tomcat/"
EMAIL_SUBJECT="$SOURCE_SOFTWARE_NAME 配置文件告警"
EMAIL_CONTENT="$EMAIL_MESSAGE"
EMAIL_RECIPIENT="15515190288@163.com"
EMAIL_FORWARD="1121935967@qq.com,15515190288@163.com"
set from=15515190288@163.com
set smtp=smtp.163.com
set smtp-auth-user=15515190288@163.com
set smtp-auth-password=KPGMJFBADGSBUGVN
set smtp-auth=login
- 定时任务设定
chmod a+x /root/configuration-backup.sh
(crontab -l;echo "00 2 * * * /root/configuration-backup.sh >/dev/null 2>&1") | crontab
- 附件