您的位置:首页 > 运维架构 > Shell

shell 编写程序检查备份是否成功,并发送email到指定邮箱 推荐

2011-04-25 16:12 387 查看
文章《企业级数据备份,rsync加shell编程,实现增量备份 》 原文地址:http://yaozb.blog.51cto.com/2762349/509266 ,有读者提问怎么才能判断mysql是否备份成功呢,这个问题问的好,其实可以在真实服务器上的备份程序最后一行加入一个通知命令,当整个程序运行完了之后,运行通知命令即可知道是否备份成功。 现在,我们换一种方法,我们在备份服务器上,利用shell写一个检查程序,每天定时检查一下备份是否成功,备份的数据包大小和路径。并通过email发送到指定邮箱。即可得知道是否备份成功,及备份的数据包大小和路径。如果没有备份成功,即检查未备份时间,并提醒备份。

注:此服务器必须开放25端口,(如posfix,sendmail等,都可以)
下面,来贴一下程序代码和配置文件

配置文件:
#vim /home/mulu





这个配置文件里,写着都是数据库压缩包的路径,目录下面全是数据库的压缩包
例如:




再来贴一下程序文件:
# vim checkback.sh




源文件:
#! /bin/bash
for i in `cat /home/mulu`
do
server=`echo $i|awk -F \/ '{print $3}'`

if [ -f $i/$server.`date +"%Y%m%d"`.tar ];then
file=$i/$server.`date +"%Y%m%d"`.tar

old=`du -sh $file`
echo "$server 备份完成,数据库包大小为 $old" |mail -s "$server backup complete" 410018348@qq.com

else
last=`ls -r $i/$server*|sed -n 1p`
lasttime=`stat $last|grep Modify|awk '{print $2}'`
lastchuo=`date -d "$lasttime" +%s`
nowchuo=`date +%s`
cha=$(( $nowchuo - $lastchuo))
all=$(( $cha / 86400 ))
day=`echo $all |awk -F . '{print $1}'`
echo "$server 此服务器已经有 $day 天没有备份了,还不赶快备份" |mail -s "warning $server no backup" 410018348@qq.com

fi
done

这个程序是每天四点半运行一次:如下图:




再来看一下运行结果:





如果备份完成,他会显示此服务器备份完成。并统计数据库压缩包大小,及数据包数据,
如下图:




如果没有备份完成,他会统计最后一次备份时间,并计算出,您已经有几天没有备份:
如下图:


========================================================================

好了,程序就这个功能,现在我们来看一下程序的工作原理:

#! /bin/bash
for i in `cat /home/mulu` # 我们逐一来读取这个文件里每一行,其实每一行就是服务器备份后的数据库所在路径。
do
server=`echo $i|awk -F \/ '{print $3}'` # 通过读取的路径,取出服务器的Ip地址给server变量

if [ -f $i/$server.`date +"%Y%m%d"`.tar ];then #判断目录下是否有今天新备份的压缩文件。
file=$i/$server.`date +"%Y%m%d"`.tar #如果有的话,把他赋值给file

old=`du -sh $file` #判断file变量,就是今天的包的大小,并给old变量
echo "$server 备份完成,数据库包大小为 $old" |mail -s "$server backup complete" 410018348@qq.com
#发送信息到 指定的邮箱。信息为:服务器名,包大小。及路径

Else #再来判断,如果找不到今天备份的数据库压缩包
last=`ls -r $i/$server*|sed -n 1p` # 找出最后一个数据库压缩包
lasttime=`stat $last|grep Modify|awk '{print $2}'` #找出最后一个数据库压缩包的创建时间
lastchuo=`date -d "$lasttime" +%s` #把最后一个数据库压缩包的创建时间转化为时间戳
nowchuo=`date +%s` #取现在的时间戳
cha=$(( $nowchuo - $lastchuo)) #对比两个时间戳。并取出值
all=$(( $cha / 86400 )) #把对出时间戳取出来的值除以86400(注:86400为一天,并取值)
day=`echo $all |awk -F . '{print $1}'` #把除的值,取整数。即天数。
echo "$server 此服务器已经有 $day 天没有备份了,还不赶快备份" |mail -s "warning $server no backup" 410018348@qq.com
#发送信息到 指定的邮箱。信息为:最后一次备份数据到目前为止的天数据 。即有几天没有备份了!

fi
Done
结束程序。

嗯。好了,每天就可放心的读邮件了,不要像以前那样,一个目录一个目录的进去找,看有没有备份成功,哈哈。有不懂可以联系我:扣扣:410018348

最后推广一下我的网站 看电影网
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐