码迷,mamicode.com
首页 > 系统相关 > 详细

linux SVN备份

时间:2016-05-26 19:07:17      阅读:285      评论:0      收藏:0      [点我收藏+]

标签:svn   subversion   

#!/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... ;break) ||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"


实现功能:

每周日进行全备,其它几天增量备份

若某项目仓库本次与上次备份期间没有提交修改,则跳过该项目

linux SVN备份

标签:svn   subversion   

原文地址:http://itest.blog.51cto.com/3511959/1783556

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!