标签:
#!/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