最近公司发生了蛮多事情的,唉,咱也不管问啊,好好干活吧
需求
把gitlab的备份文件异地备份一份,备份无论失败还是成功通知某邮箱
实现思路
先rsync文件过去,判断rsync这个步骤有没有成功,失败了直接发送备份失败的邮件,成功了的话,再判断源文件和备份的文件的md5值,相等发送备份成功,不相等,发送备份失败
#!/bin/bash gitlab_dir="/data/backups/gitlab" file_name=`ls -tr $gitlab_dir|tail -n 1` #get lastest gitlab file port="22" IP="192.168.129.212" backup_dir="/data/gitlab-backup-from-172.17.3.41" starttime=`date +'%Y-%m-%d %H:%M:%S'` function send_mail(){ if [ $# != 2 ] ; then echo "需要2个参数,一个是邮件内容,一个是邮件主题" exit 1; fi echo "$1" |mail -s "$2" 528634141@qq.com } function md5sum_file(){ source_file_name_md5sum_value=`md5sum $gitlab_dir/$file_name|awk '{print $1}'` echo "$file_name" >/tmp/md5sum.txt scp /tmp/md5sum.txt $IP:/tmp back_file_name_md5sum_value=`ssh $IP 'sh /usr/local/shells/md5sum.sh'` echo $back_file_name_md5sum_value if [ $source_file_name_md5sum_value == $back_file_name_md5sum_value ];then FLAG=0 else FLAG=1 exit 1 fi } function rsync_file(){ rsync -av --progress --bwlimit=1500 -e "ssh -p$port" $gitlab_dir/$file_name $IP:$backup_dir if [ $? -eq 0 ];then md5sum_file if [ $FLAG == 0 ];then endtime=`date +'%Y-%m-%d %H:%M:%S'` send_mail "研发源gitlab(172.17.3.41)-文件$file_name备份至世纪互联服务器$IP成功,md5值为:$back_file_name_md5sum_value,请确认! 开始时间:$starttime, 结束时间:$endtime" "Gitlab备份成功!" else send_mail "研发源gitlab(172.17.3.41)-文件验证md5值失败,$file_name备份失败,请确认!" "Gitlab备份失败!" fi else send_mail "rsync $file_name失败" "rsync $file_name失败" exit 1 fi } rsync_file
优化的地方
- 发送邮件的函数太粗糙了
- 没有判断源gitlab是否备份成功了
- 取最新的文件也很粗糙