整套需求,須要備份代碼機代碼並同步到異地備份服務器,最後備份服務器須要判斷備份文件是否正常,代碼機的數據是否和備份機的數據正常。bash
實現思路:
1.首先實現備份數據。
2.將數據同步到異地備份服務器。
3.文件校驗,可使用md5來實現(將原數據的md5值同步到異地而後進行校驗)。服務器
文件備份腳本以下:
執行腳本以前須要注意幾個事項,
1.異地備份服務器和本地代碼機須要安裝rsync服務
2.異地備份服務器須要配置rsync服務,一個備份數據存放目錄,一個是日誌文件存放目錄(日誌內有md5值,須要作校驗用。)
3.rsync的密碼文件權限必須爲600,要不會同步失敗ide
#!/bin/bash #author: wys #date: 20190410 #common: 備份服務器代碼文件 ######################################## ##備份命令: sh 腳本名稱+文件路徑+文件名稱### ######################################## set -e source /etc/bashrc #獲取本機ip地址(雲服務器須要手動配置IP地址,須要根據實際環境確認IP是否正確) #IP=$(/sbin/ip addr |grep inet |grep -v inet6 |grep em1|awk '{print $2}' |awk -F "/" '{print $1}') IP=x.x.x.x work_dir=$1 file_name=$2 backup_dir=備份路徑 date=$(date "+%Y%m%d") ##獲取系統時間 #判斷work_dir和file_name是否爲空: if [[ ! -n "$work_dir" || ! -n "$file_name" ]] ;then echo "ERROR:work_dir或file_name參數爲空" echo "commd:sh file_backup.sh work_dir file_name;兩個參數都爲必填參數)" exit else #Log存放路徑 LogFile=$backup_dir/log/${IP}_${file_name}_${date}.log if [ ! -d '$backup_dir/log' ]; then mkdir -p $backup_dir/log fi #新建日誌文件 touch $LogFile #追加日誌到日誌文件 echo "start backup, start at $(date +"%Y-%m-%d %H:%M:%S")" > $LogFile echo "-------------------Start!---------------------------------" >> $LogFile if [ ! -d '$backup_dir/$file_name' ]; then mkdir -p $backup_dir/$file_name fi #備份文件 echo "備份相關文件 $file_name" >> $LogFile echo "tar czf ${backup_dir}/${file_name}/${file_name}_${date}.tar.gz --exclude=不須要備份的文件可使用此參數過濾掉 -C $work_dir $file_name" >> $LogFile tar czf ${backup_dir}/${file_name}/${file_name}_${date}.tar.gz -C $work_dir $file_name if [ $? -eq 0 ];then ##判斷命令是否執行即數據是否備份成功 echo "Backup_Status="SUCCESS"" >> $LogFile else echo "Backup_Status="FAILED"" >> $LogFile fi ##查看備份文件大小 Bar_Size=`du -sh $backup_dir/$file_name/${file_name}_${date}.tar.gz |awk '{print $1}'` ##獲取備份文件的md5值 MD5=`/usr/bin/md5sum $backup_dir/$file_name/${file_name}_${date}.tar.gz | awk '{print $1}'` echo "備份文件路徑:$backup_dir/$file_name/${file_name}_${date}.tar.gz" >> $LogFile echo "文件大小:${Bar_Size}">> $LogFile echo "MD5: $MD5" >> $LogFile echo "-----------------------------------------------------" >> $LogFile ###備份文件須要定時清理,要不會致使磁盤爆滿。 ###備份數據保留5天(保留時間可根據需求自行修改) find $backup_dir/$file_name/ -mtime +5 -name "*.tar.gz" -exec rm -rf {} \; ###日誌文件保存3天(保留時間可根據需求自行修改) find $backup_dir/log -mtime +3 -name "*.log" -exec rm -rf {} \; #備份完成追加日誌到日誌文件 echo "-----------------------------------Complete!----------------------------------------" >> $LogFile echo "backup end, end at $(date +"%Y-%m-%d %H:%M:%S")" >> $LogFile ##同步備份文件到備份服務器 echo "start rsync,$(date +"%Y-%m-%d %H:%M:%S")" >> $LogFile rsync -rauvt --progress --password-file=/data/scripts/backup.pass --bwlimit=500 $backup_dir/$file_name/${file_name}_${date}.tar.gz backup@異地備份服務器的ip::backup/$IP/$file_name/ if [ $? -eq 0 ];then echo "Rsync_Status="SUCCESS"" >> $LogFile echo "rsync end,$(date +"%Y-%m-%d %H:%M:%S")" >> $LogFile else echo "Rsync_Status="FAILED"" >> $LogFile echo "rsync end,$(date +"%Y-%m-%d %H:%M:%S")" >> $LogFile fi ##拷貝日誌文件到遠程服務器 rsync -rauvt --progress --password-file=/data/scripts/backup.pass $LogFile backup@異地備份服務器的ip::logs fi
執行命令如須要備份/data/www下的code目錄:sh back_files.sh /data/www code
切記腳本運行前須要測試是否正常運行,要不致使數據備份失敗。測試