标签:
#!/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报警就实现了。
标签:
原文地址:http://my.oschina.net/u/2322690/blog/485767