#!/bin/bash source /etc/profile back_base_dir=/data/svn_backup svn_base_dir=/data/svn_pool log_file=$back_base_dir/svn_backup.log dayofweek=$(date +%u) for project in Android IOS UI farm product 官網;do REPOS_DIR=$svn_base_dir/$project REPOS_BAK_DIR=$back_base_dir/$project DATE=$(date +%Y%m%d_%H%M%S) version_file=$REPOS_BAK_DIR/.version test -d $REPOS_BAK_DIR ||mkdir -p $REPOS_BAK_DIR #如果version_file不存在或為空,則給一個初始值 test -s $version_file ||echo '0' > $version_file #每周日進行全備,其它幾天為增量備份 if [ $dayofweek -ne 7 ];then NUM1=$(cat $version_file) else NUM1=0 fi NUM2=$(svnlook youngest $REPOS_DIR) #根據版本號判斷該增量還是全備 if [ $NUM1 -eq 0 ];then file=$(date +%F_%H%M%S)_full.dump else file=$(date +%F_%H%M%S)_incremental.dump fi #版本號相同的話跳過備份 test $NUM1 -eq $NUM2 && { echo $project no modify,go to next repository... ;continue; } ||echo starting $project backup... svnadmin dump $REPOS_DIR -r $NUM1:$NUM2 --incremental > $REPOS_BAK_DIR/$file 2>/dev/null if [ $? -eq 0 ]; then # 備份成功的話改變version_file的版本號,並寫入日志 echo $NUM2 > $version_file echo $(date "+%Y-%m-%d %H:%M:%S") Backup to $REPOS_BAK_DIR/$file complete... >>$log_file else echo "backup fail...." echo $(date "+%Y-%m-%d %H:%M:%S") Backup Error...>>$log_file fi done然後把該腳本加入到系統定時任務即可
"10 23 * * * /home/script/svn_backup.sh"
實現功能:
每周日進行全備,其它幾天增量備份
若某項目倉庫本次與上次備份期間沒有提交修改,則跳過該項目