SVN自動化備份、恢復腳本(上)

#!/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

相關文章
相關標籤/搜索