教学之友,学习之友。

站长教学网

当前位置: 站长教学网 > 电脑教学 > 软件 >

SVN备份脚本分享

时间:2012-12-28 16:25来源:未知 作者:ken 点击:

 这个脚本个人觉得比较完美了,SVN完全备份,加增量备份,并将备份出来的数据,同步到另外一台服务器上,而且可以实现实时备份并发邮件通知,历史备份记录想查就查。

这个脚本参考了部分网上的资源。

稍作修改就可以应用到你的实际生产环境了,有问题的话,可以联系我(*^__^*) ……

具体脚本内容如下:站长教学网 eduyo.com

 

#!/bin/sh  

#by 崔元荣

#QQ:295749093 

#svn多功能备份脚本! 

svnbak_remote_dir=/data/192.168.1.7_svn/   

 

###################################  

BACKUPDIR=/var/svnbackup  

 

###################################  

SVNDIR=/var/svn  

 

###################################  

ProjectLst=$BACKUPDIR/projectlist.txt  

 

###################################  

LogFile=$BACKUPDIR/svnback.log  

History_LogFile=$BACKUPDIR/history_svnback.log  

DATE=`date +%Y%m%d-%T`  

 

# - This is the path to the directory you want to archive  

###################################  

export PATH=$PATH:/bin:/usr/bin:/usr/local/bin  

 

# our actual rsyncing function 

do_accounting()  

{  

    echo " " > $LogFile  

        echo " " >> $LogFile  

        echo " " >> $LogFile  

        echo "###########################" >> $LogFile  

        echo "$DATE" >> $LogFile  

        echo "###########################" >> $LogFile  

 

        echo " " >> $History_LogFile  

        echo " " >> $History_LogFile  

        echo "###########################" >> $History_LogFile  

        echo "$DATE" >> $History_LogFile  

        echo "###########################" >> $History_LogFile  

 

        cd $BackDir  

}  

 

do_svndump()  

{  

   PROJECTLIST=`cat $ProjectLst`  

   cd $SVNDIR  

   for project in $PROJECTLIST  

          do  

          echo "begin to dump $project databases" >> $LogFile  

          echo "begin to dump $project databases" >> $History_LogFile  

                if [ ! -f $BACKUPDIR/$project.dump ]  

                then 

                YOUNGEST=`svnlook youngest $project`  

                svnadmin dump $project > $BACKUPDIR/$project.dump  

                  if [ $? != 0 ];then 

                echo "full-backup faild" >> $LogFile  

                echo "full-backup faild" >> $History_LogFile   

                    else 

                        echo "OK,dump file successfully!!" >> $LogFile  

                        echo "OK,dump file successfully!!" >> $History_LogFile   

                      fi  

                echo "$YOUNGEST" > $BACKUPDIR/$project.youngest  

                else 

                        echo "$project.dump existed,will do increatment job" >> $LogFile  

                        echo "$project.dump existed,will do increatment job" >> $History_LogFile   

                        if [ ! -f $BACKUPDIR/$project.youngest ]  

                        then 

                        echo "error, no youngest check!" >> $LogFile  

                        echo "error, no youngest check!" >> $History_LogFile  

                        else 

                                PREVYOUNGEST=`cat $BACKUPDIR/$project.youngest`  

                                NEWYOUNGEST=`svnlook youngest $project`  

                                if [ $PREVYOUNGEST -eq $NEWYOUNGEST ]  

                                then 

                                        echo " no database updated!" >> $LogFile  

                                        echo " no database updated!" >> $History_LogFile  

                                else 

                                        LASTYOUNGEST=`expr $PREVYOUNGEST + 1`  

                                        echo "last youngest is $LASTYOUNGEST" >> $LogFile  

                                        echo "last youngest is $LASTYOUNGEST" >> $History_LogFile  

                                        svnadmin dump $project --revision $LASTYOUNGEST:$NEWYOUNGEST --incremental > $BACKUPDIR/$project-$LASTYOUNGET-$NEWYOUNGEST.$DATE  

                                          if [ $? != 0 ];then 

                                             echo "zhengliang-backup faild" >> $LogFile  

                                             echo "zhengliang-backup faild" >> $History_LogFile  

                                               else 

                                                    echo "$NEWYOUNGEST" > $BACKUPDIR/$project.youngest  

                                                    echo "zhengliang-backup sucess!" >> $LogFile  

                                                    echo "zhengliang-backup sucess!" >> $History_LogFile  

                                                   fi  

                                fi  

                        fi  

  fi  

        done  

}  

 

 

do_rsync()  

{  

rsync -avz --partial --progress --delete $BACKUPDIR/* root@192.168.1.6:$svnbak_remote_dir  

if [ $? != 0 ]; then 

    echo "svnbak 192.168.1.7 rsync to 192.168.1.6 faild!!!" >> $LogFile  

    echo "svnbak 192.168.1.7 rsync to 192.168.1.6 faild!!!" >> $History_LogFile   

else 

    echo "svnbak 192.168.1.7 rsync to 192.168.1.6 successfully!!" >> $LogFile  

    echo "svnbak 192.168.1.7 rsync to 192.168.1.6 successfully!!" >> $History_LogFile   

fi  

}  

 

do_empty()  

{  

#echo "" > $LogFile  

for project in `cat $ProjectLst`  

do  

    rm -f $BACKUPDIR/$project*  

done  

}  

 

do_mail()  

{  

cat $LogFile | mutt -s "SVN Backup status!" test@xiaocui.com  

}  

#################################################  

 

case "$1" in 

    dump_full)  

        do_empty && do_accounting && do_svndump && do_rsync && do_mail  

        ;;  

    dump_incremental)  

        do_accounting && do_svndump && do_rsync && do_mail  

        ;;  

    *)  

        echo $"Usage: $0 {dump_full|dump_incremental}" 

        exit 2  

esac  

 

(责任编辑:ken)
TAG标签: SVN 脚本
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
注册登录:不允许匿名留言,登录后留言无需输入验证码。
栏目列表
最新内容