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

#!/bin/bash

#本腳本是用來計算本地磁盤空間大小,而且與svn備份文件大小進行比較判斷,當知足什麼條件時,作出相應的響應。
#第一步是檢測svn服務器,svn數據文件的總量大小和本機磁盤剩餘空間的大小。
##鏈接10.68.3.152服務器,查看最新svn文件大小,獲取查看的值。

datef() {
        date "+%Y/%m/%d %H:%M"
}

password=xxxx2015
svnreport=/data/log/report_`date "+%Y%m%d"`.log

if [[ ! -f $svnreport ]];then
        touch $svnreport
fi
echo "[$(datef)] 開始鏈接3.152服務器,查詢svn大小" >> $svnreport

#查詢svn文件大小
connect152() {

        expect -c " 
                set timeout 30
                spawn ssh root@192.168.3.152
                expect \"root@192\.168\.3\.152's password:\"
                send \"$password\r\"
                expect \"*# \"
                send \"cat \/data\/log\/report152.log\r\"
                expect \"eof\"
                  "
}

echo "[$(datef)] 開始鏈接3.65服務器,查詢svn大小" >> $svnreport

connect65() {

        expect -c " 
                set timeout 30
                spawn ssh root@192.168.3.65
                expect \"root@192\.168\.3\.65's password:\"
                send \"$password\r\"
                expect \"*# \"
                send \"cat \/data\/log\/report65.log\r\"
                expect \"eof\"
                  "

}

#將查詢的函數賦給變量,便於取值。

result152=$(connect152)
result65=$(connect65)

#過濾出咱們須要的數值,也就是查詢後的svn文件大小

echo "$result152 " |grep "/var/svn" | grep -v "#" | awk '{print $1}' >/dev/null
value152=`echo "$result152 " |grep "/var/svn" |grep -v "#" |awk '{print $1}'`
echo "[$(datef)] '152上svn文件大小='$value152 ">> $svnreport

echo "$result65 " |grep "/data/svn" | grep -v "#" | awk '{print $1}' >/dev/null
value65=`echo "$result65 " |grep "/data/svn" |grep -v "#" |awk '{print $1}'`
echo "[$(datef)] '65上svn文件大小='$value65 ">> $svnreport

#計算兩臺服務器上的svn文件大小總和
((value=$value152+$value65))

echo "[$(datef)] '兩臺svn,總文件大小='$value ">> $svnreport

#查詢本地剩餘磁盤空間,默認svn備份時在/svnbackup目錄下,該目錄有500G的空間。

value248=`df /svnbackup | awk '{print $4}'| grep -v "Available"`

echo "[$(datef)] '本機剩餘磁盤空間大小='$value248 ">> $svnreport

#判斷比較,若是本地磁盤空間大於svn的文件,那麼正常備份,不然發送郵件給管理員發出警告。


if [[ $value -lt $value248 ]]
then
        echo '開始執行3.65異地備份回滾動做'>>$svnreport
        sh /data/scripts/auto_scp65.sh
        sleep 4h
        echo '開始執行3.152異地備份回滾動做'>>$svnreport
        sh /data/scripts/auto_scp152.sh
else

        #這裏作減法運算,最先svn保留8天的備份,當svn文件逐步增大後,就相應減小svn備份。
        #經過查詢/data/log/num,該文件記錄svn備份保留天數。

        NUM=`cat /data/log/num`
        #適當減小svn備份保留的次數
        NUM=$(expr $NUM - 1 )
        #將保留的值,存放起來,以便之後再次判斷。
        echo "$NUM" > /data/log/num
        echo "[$(datef)] 'NUM-1='$NUM ">> $svnreport
        
        fewdaysago=`date -d "$NUM day ago" +%Y%m%d`
        echo "[$(datef)] 'fewdaysago='$fewdaysago" >> $svnreport

        #刪除svn152備份
        cd /svnbackup/backup152
        if [[ -d $fewdaysago ]]
        then
                rm -rf $fewdaysago
        else
                echo "[$(datef)] $fewdaysago not exist in /svnbackup/backup152/ " >> $svnreport 2>&1
        fi

        #刪除svn65備份
        cd /svnbackup/backup65
        if [[ -d $fewdaysago ]]
        then
                rm -rf $fewdaysago
        else
                echo "[$(datef)] $fewdaysago not exist in /svnbackup/backup65/ " >> $svnreport 2>&1
        fi

        #在備份最新的svn數據
        echo "[$(datef)] 備份最新的" >> $svnreport

fi


#判斷NUM的值,當NUM的值不大於5的時候就發郵件給管理員。
#這裏郵件採用的是mutt+msmtp 編輯發送。
#注:我這裏測試郵件發送功能時,選擇當num值不小於5時,就發送
NUM=`cat /data/log/num`
echo "[$(datef)] 'NUM='$NUM ">> $svnreport

if [[ $NUM -ge 5 ]]
then
        echo "[$(datef)] 即將發送郵件給管理員">> $svnreport
        cat /data/log/report_`date "+%Y%m%d"`.log | mutt -s "warnning svn backup" 1557882533@qq.com
fi

本例中,因爲只須要向管理員發送報警郵件,而不須要郵件回覆,所以就採用了mutt+msmtp 來實現這一功能。下面介紹如何配置。c++

#安裝前,請確保服務器已安裝以下包

yum install gcc gcc-c++ gnutls gnutls-devel gnutls-utils openssl openssl-devel libidn libidn-devel -y

#mutt能夠用yum裝
yum   -y   install   mutt*
#從網上down下msmtp的tar包
wget http://down1.chinaunix.net/distfiles/msmtp-1.4.28.tar.bz2

#解壓tar包
tar   -jxvf   msmtp-1.4.28.tar.bz2
cd   msmtp-1.4.28
./configure    --prefix=/usr/local/msmtp
make  &&   make   install 

#建立msmtp的配置目錄
mkdir   /usr/local/msmtp/etc
#建立mail帳號文件
touch   /usr/local/msmtp/etc/msmtprc
#
vim     /usr/local/msmtp/etc/msmtprc
    defaults
    tls on
    #msmtp的日誌文件
    logfile /usr/local/msmtp/msmtp.log
    #虛擬郵件帳號名稱acc2
    account acc2
    #經過qq郵箱,將郵件發送至管理員手中
    host smtp.qq.com
    port 465
    #表示郵件是從599080723@qq.com 這個郵箱帳號發送給管理員的帳號
    from 599080723@qq.com
    auth login
    #qq郵箱不支持tls_starttls,所以須要關閉該選項。
    tls_starttls off
    tls on
    tls_certcheck off
    #這裏記錄了599080723郵箱帳號的賬密信息
    user 599080723@qq.com
    #這裏的密碼是明文,
    password xxxxxxxxx
    #你能夠配置多個虛擬郵箱帳號,以便發送給不用郵箱類型的用戶。
    account default : acc2
                   
        
接來下是配置mutt
    vim   /etc/Muttrc 
    #在文件的最後面,加入以下幾行。
    #wangjl add new
    #設置執行mail發送的文件
    set sendmail="/usr/local/msmtp/bin/msmtp"
    #是否設置郵件的發送人
    set use_from=yes
    set realname="599080723@qq.com"
    set editor="vim"
    #郵件的編碼格式爲utf8,以前沒寫這個,結果發送給個人郵件都是亂碼。
    set charset="utf8"

#測試看是否能夠發送郵件
echo  「this  is  a   test   mail」 | mutt  -s  "title"   1557882533@qq.com  
#而後看1557882533的郵箱是否收到了測試郵件。
#若是測試成功的話,那麼咱們就能夠將svn備份等信息發送給管理員,以便其判斷svn是否備份回滾成功。
cat /data/log/report_`date "+%Y%m%d"`.log | mutt -s "warnning svn backup" 1557882533@qq.com

那麼至此,svn異地自動化備份和災後恢復以及mail報警就實現了。shell

相關文章
相關標籤/搜索