#!/bin/bash #svn服務器地址以下,本機的ip地址爲192.168.4.248 IP152=192.168.3.152 Password=xxxx2015 fewdaysago=`date -d "8 day ago" +%Y%m%d` now=`date +%Y%m%d` #定義svn備份日誌路徑 logdir=/svnbackup/log #定義svn備份路徑 backupdir=/svnbackup #定義httpd的配置文件 subdir=/etc/httpd/conf.d #定義 函數 鏈接192.168.3.152 svn服務器 connection152() { cd $backupdir/backup152 #若是系統存在8天前的備份則刪除。 if [[ -d $fewdaysago ]] then rm -rf $fewdaysago else echo "1. $fewdaysago not exist in /svnbackup/backup152/ " >> $logdir/report152_$now.log 2>&1 fi echo "2. scp backup svn from the 3.152 to 4.248 right now " >> $logdir/report152_$now.log 2>&1 #這裏利用expect 實現自動輸入密碼等操做。使用該命令前,請先安裝yum -y install expect* expect -c " #永不超時 set timeout -1 #定義一個子shell,執行scp命令,將192.168.3.152上的svn備份數據,拷貝到本機。 spawn scp -r root@$IP152:/backup/svn/backup/$now.tar.gz $backupdir/backup152 #自動化輸入密碼 expect \"root@$IP152's password:\" send \"$Password\r\" #完成傳輸則結束命令。 expect \"eof\" " #對上面的操做進行判斷,若是正常執行完,則繼續下面的動做。 if [[ $? = "0" ]]; then echo "3. backup 152svn have done " >> $logdir/report152_$now.log 2>&1 fi echo "4. unpack the $now.tar.gz" >> $logdir/report152_$now.log 2>&1 cd $backupdir/backup152 tar -xf $now.tar.gz echo "5. delete tar pack " >> $logdir/report152_$now.log 2>&1 rm -f $now.tar.gz echo "6. Testing rollback 152svn backup right now" >> $logdir/report152_$now.log 2>&1 #刪除本機svn庫目錄下的全部文件及目錄除了conf目錄。這裏本機作這個是爲了測試拷貝過來的svn備份文件可以正常恢復。演練svn服務器災後恢復。 cd $backupdir/152 ls -l $backupdir/152 | grep -v "conf" | awk '{print $9}' | while read dir do rm -rf $dir done echo "7. yesterday data all has delete done" >> $logdir/report152_$now.log 2>&1 echo "8. rollback now" >> $logdir/report152_$now.log 2>&1 } #開始svn災後恢復動做。 start() { mv $backupdir/backup152/backup/svn/$now $backupdir/backup152/ rm -rf $backupdir/backup152/backup/* rm -rf $backupdir/backup152/backup/ cd $backupdir/backup152/$now cp -fvr $backupdir/backup152/$now/* $backupdir/152 #這裏svn結合了httpd,方便用戶web端訪問。因此,httpd的配置文件中,就要修改下svn工程目錄的位置。 cd $subdir echo "9. change httpd subversion.conf" >> $logdir/report152_$now.log 2>&1 #自動化執行httpd配置文件替換和httpd重啓動做。 expect -c " set timeout -1 spawn cp -ar $subdir/subversion152 $subdir/subversion.conf expect \"cp: overwrite 'subversion.conf'?\" send \"yes\r\" expect \"eof\" " #給目錄賦權。 echo "10. chown -R apache.apache $backupdir/152" chown -R apache.apache $backupdir/152 /etc/init.d/httpd restart } connection152 start
以上shell能夠執行svn的遠程異地備份動做。磁盤監控以及mail報警,在下篇日誌將介紹。web