码迷,mamicode.com
首页 > 其他好文 > 详细

SVN自动化备份、恢复脚本(下)

时间:2015-07-30 19:40:58      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:

#!/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 来实现这一功能。下面介绍如何配置。

#安装前,请确保服务器已安装如下包

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报警就实现了。



SVN自动化备份、恢复脚本(下)

标签:

原文地址:http://my.oschina.net/u/2322690/blog/485767

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!