本文共 1316 字,大约阅读时间需要 4 分钟。
#!/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"
实现功能:
每周日进行全备,其它几天增量备份
若某项目仓库本次与上次备份期间没有提交修改,则跳过该项目
转载地址:http://lhlyo.baihongyu.com/