linux svnsync 自动备份脚本

 最近需要对svn project进行自动备份,想采用svnsync方式,从网上修改了一脚本,记录以作备忘(svnsync 备份详解 )!

环境:192.168.3.161 (svn环境 svn项目存放目录:/usr/local/svn/svn/ )

          192.168.3.160 (svn环境 svn项目备份目录:/var/svn)

192.168.3.161创建目录/svn_all,然后192.168.3.160:/var/svn挂载至/svn_all,命令如下:(nfs配置不做讲述)

[root@SVN svn_all]# mount -o nolock -t nfs 192.168.3.160:/var/svn /svn_all/

nfs自动挂载设置:[root@SVN etc]# vi /etc/fstab

192.168.3.160:/var/svn  /svn_all                nfs     nolock          0 0

创建一脚本svn_sync.sh

#!/bin/sh
LogFile=/svn_all/log/svnback.log
DATE=`date`
MAILADDR=88fly@163.com
ProjectLst=/svn_all/projectlist.conf
BackDir=/svn_all
SVNDIR=/usr/local/svn/svn
SVNSYNC=/usr/local/svn/bin/svnsync
SVNLOOK=/usr/local/svn/bin/svnlook
SVNADMIN=/usr/local/svn/bin/svnadmin
export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
do_touch()
{
        touch $hookfile
   sh="#!/bin/sh" && echo $sh > $hookfile
        chmod 755 $hookfile

}

do_accounting()
{
        echo " " > $LogFile
        echo " " >> $LogFile
        echo "-------------------------------------------------------------------------------------------" >> $LogFile
        echo "         "This script is executed in $DATE"                                               " >> $LogFile
        echo "-------------------------------------------------------------------------------------------" >> $LogFile
        cd $BackDir
}

do_rsync()
{
   PROJECTLIST=`cat $ProjectLst`
   for project in $PROJECTLIST
          do
                projectdata=$SVNDIR/$project
                destdir=$BackDir/$project
    hookfile_tmp="$destdir/hooks/pre-revprop-change.tmpl"
                hookfile="$destdir/hooks/pre-revprop-change"
                ssrepo=`$SVNLOOK youngest $projectdata`
                dtrepo=`$SVNLOOK youngest $destdir`
#check whether svn repository is existed. if not, then use svnadmin create it.
                if [ -d $destdir ]
                then
                        echo "-------------------------------------------------------------------------------------------" >> $LogFile
                        echo "                                      $project                                             " >> $LogFile                              
                        echo "-------------------------------------------------------------------------------------------" >> $LogFile
                        echo "checking hooks file" >> $LogFile
                        if [ -f $hookfile ]
                        then
             
                                chmod 755 $hookfile
        sed -i 's/exit 1/exit 0/g' $hookfile
                        else
                                do_touch
                        fi
                        echo " Be in luck...seems we have $project repository,now do init or sync!!" >> $LogFile
                        echo " " >> $LogFile
                        echo " " >> $LogFile
                else
                        echo " Bad luck... seems we have no $project repository, now will create it and sync!" >> $LogFile
                        echo " " >> $LogFile
                        echo " " >> $LogFile
                        $SVNADMIN create $destdir
      cp $hookfile_tmp $hookfile
                        sed -i 's/exit 1/exit 0/g' $hookfile
                        chmod 755 $hookfile      
                        echo " we create the $project repository successfully!" >> $LogFile
                fi

#check svn version, if 0, then init it.
                if [ "$dtrepo" -eq "0" ]
                then
                        $SVNSYNC init
file://$destdir file:///$projectdata
                        $SVNSYNC sync file://$destdir
                        echo "sync $project done into $destdir" >> $LogFile
                else
                        if [ "$ssrepo" -eq "$dtrepo" ]
                        then
                                echo "sorry, the repository $project is updated, don't need do it" >> $LogFile
                        else
                                $SVNSYNC sync
file:///$destdir
                                echo "sync $project done into $destdir" >> $LogFile
                        fi
                fi
        done
}
do_accounting && do_rsync

加入crontab定时执行即可!

[root@SVN etc]# cat /etc/crontab

* */1 * * * root sh /etc/svnconf/svn_sync.sh > /dev/null 2>&1

#此处是每小时更新,可根据实际环境修改时间!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值