作者: Tscccn |
日期: 2013 年 04 月 03 日 |
围观: 13983次+ |
8 条评论
你可以使用resync来保持两台机器的数据同步(不建议小文件变更多、快情况下使用)
系统:centos 5.6
svn version:1.6.11
是否需要mail服务:是,请安装sendmail、mutt(可选 只要你linux那可以发送邮件就可以)
是否与http服务整合:是
里面内容请参考如下两处文章
1 2 |
FTP备份用的一个Shell方法函数 http://kinggoo.com/ftp-ftpfunction.htm svn服务增量备份脚本,Incremental backup script http://kinggoo.com/svn-incrementalscript.htm |
[root@kinggoo.com cron]# cat svnBackup.cron.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
#!/bin/bash #### //kinggoo.com #### 需要安装sendmail、mutt以便发送邮件通知,当然也可以改下代码,弄成网页访问形式也可以 #### 不要删除SVN_LOG后面设置变量的任何文件,否则备份时会自动全备 #### if [[ ${WEEKDAY} = 'Fri' ]];then 这里是做全备的判断可以修改为其他,但请尽量不要修改为周末。 TIME=`date +%Y%m%d` YM=`date +%Y%m` WEEKDAY=`date +%a` DAYTIME=`date +%Y%m%d%H` SVNROOT=/opt/svnroot SVNDATA=/svn HTTP=/etc/init.d #请创建用于全备的目录文件SVNALL SVNALL=${SVNDATA}/svnall SVN_LOG=${SVNDATA}/log TOMAIL="kinggoo@kinggoo.com" if [ ! -e ${SVNDATA}/${YM} ] || [ ! -d ${SVNDATA}/${YM} ];then mkdir -p ${SVNDATA}/${YM} SVNDATA=${SVNDATA}/${YM} else SVNDATA=${SVNDATA}/${YM} fi echo "" > ${SVN_LOG}/svn.mail > /dev/null #针对配置http集成svn服务来做,如果你没有将http添加到服务。脚本内是通过http服务生效后返回显示信息OK来判断是否启动的! declare -a REPOSITORY REPOSITORY=( KingGoo com ) ARR=0 # - function 集合 function RunStophttp() { # apache服务起停 ${HTTP}/httpd $1 |grep -i OK && I=$? || I=1 sleep 5 if [ "$1" = "stop" ];then if [[ "${I}" -eq "0" ]];then echo "-- httpd is stopping" >> ${SVN_LOG}/svn.mail else /usr/bin/pgrep httpd|xargs kill -9 echo "-- httpd is kill for stopping" >> ${SVN_LOG}/svn.mail fi else if [ "$1" = "start" ];then if [[ "${I}" -eq "0" ]];then echo "-- httpd is running" >> ${SVN_LOG}/svn.mail else echo "-- httpd is failed" >> ${SVN_LOG}/svn.mail ${HTTP}/httpd restart |grep -i OK && I=$? || I=ERROR echo -e "成功:0,失败:1 -- \r\n [ $I ] " >> ${SVN_LOG}/svn.mail fi fi fi } ##function end # --------------------------- while [ "${ARR}" -lt "${#REPOSITORY[@]}" ] do if [ ! -e ${SVN_LOG} ] || [ ! -d ${SVN_LOG} ];then mkdir -p ${SVN_LOG} fi if [ ! -e ${SVNALL} ] || [ ! -d ${SVNALL} ];then mkdir -p ${SVNALL} fi if [ ! -e ${SVNDATA}/${REPOSITORY[$ARR]} ] || [ ! -d ${SVNDATA}/${REPOSITORY[$ARR]} ];then mkdir -p ${SVNDATA}/${REPOSITORY[$ARR]} fi BUILD=`svnlook youngest ${SVNROOT}/${REPOSITORY[$ARR]}` && sleep 2 KG_BUILD=`cat ${SVN_LOG}/${REPOSITORY[$ARR]}.version` if [ ! -e ${SVN_LOG}/${REPOSITORY[$ARR]}.version ] && [ -z ${KG_BUILD} ];then echo "0" > ${SVN_LOG}/${REPOSITORY[$ARR]}.version KG_BUILD=0 else #将最新得到的reversion存储起来,并将之前reversion+1 ((KG_BUILD=${KG_BUILD}+1)) echo "${BUILD}" > ${SVN_LOG}/${REPOSITORY[$ARR]}.version fi #ago 小于等于 after if [ ${KG_BUILD} -le ${BUILD} ];then RunStophttp stop if [[ ${WEEKDAY} = 'Fri' ]];then ##为什么是周五,原因在周末做全备此脚本是不可能的,当然你可以改下我里面的判断逻辑是可以改的。但发这个版本我并没有时间去做修改了,希望理解! svnadmin dump ${SVNROOT}/${REPOSITORY[$ARR]} > ${SVNALL}/backup.all.${REPOSITORY[$ARR]}.${BUILD}.${DAYTIME}.dump 2> ${SVNALL}/log.${DAYTIME} && sleep 30 echo -e "已执行全备信息如下:\r\n `ls -l ${SVNALL}/backup.all.${REPOSITORY[$ARR]}.${BUILD}.${DAYTIME}.dump`" >> ${SVN_LOG}/svn.mail fi echo "${REPOSITORY[$ARR]}:${YM}:${KG_BUILD}:${BUILD}" >> ${SVN_LOG}/svn.important svnadmin dump ${SVNROOT}/${REPOSITORY[$ARR]} -r ${KG_BUILD}:${BUILD} --incremental > ${SVNDATA}/${REPOSITORY[$ARR]}/${REPOSITORY[$ARR]}.${KG_BUILD}_${BUILD}.dump.${TIME} 2>> ${SVN_LOG}/${REPOSITORY[$ARR]}.log && sleep 30 echo -e "已备份${REPOSITORY[$ARR]}代码库 \r\n `ls -l ${SVNDATA}/${REPOSITORY[$ARR]}/${REPOSITORY[$ARR]}.${KG_BUILD}_${BUILD}.dump.${TIME}`" >> ${SVN_LOG}/svn.mail RunStophttp start else echo -e "代码库:${REPOSITORY[$ARR]} , 前一版本:${KG_BUILD} 大于后一版本:${BUILD} ,没有执行备份操作!" >> ${SVN_LOG}/svn.mail fi ((ARR=$ARR+1)) unset KG_BUILD BUILD BUILD_TEMP done echo "`cat ${SVN_LOG}/svn.mail`" |mutt -s "Svn incremental backup ${TIME}" ${TOMAIL} /var/spool/cron/ftpRemote.cron.sh > /root/svn.ftp.log 2>&1 |
最新评语