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
最后推广一下我的网站 看电影网
注:此服务器必须开放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
最后推广一下我的网站 看电影网
相关文章推荐
- 编写脚本:访问一网站,每5分钟访问一次,如果访问成功,将访问记录保存到日志,如果访问失败,则发送邮件至指定邮箱
- SMTP判断邮箱是否存在,检查email地…
- 将ios程序运行中的异常发送到指定邮箱
- LinuxShell-检查指定目录是否存在shell脚本文件
- SMTP判断邮箱是否存在,检查email地址是否真实存在
- 利用ASP.net编写发送Email程序
- 在Linux下编写C程序,怎么检查程序是否有内存泄漏?
- 正则表达式简单的检查输入email是否合法程序
- shell awk 检查程序是否执行
- bat 备份mysql数据库, 并把备份后的文件发送到指定的FTP和邮箱(windows2003)
- bat 备份mysql数据库, 并把备份后的文件发送到指定的FTP和邮箱(windows2003)
- Linux下一个检查跑批是否成功的Shell
- 编写程序检查某一个整数中是否有重复的数字
- 编写一个程序,检查是否一个给定的数字是一个特殊的号码(定义数组版)
- 编写一个程序,验证从标准输入获得的信用卡号是否校验通过, 校验通过,则输出”成功“,校验未通过则输出”失败“。
- VC 中调用默认邮件发送程序(Outlook)发送 指定附件的email
- 编写一个程序,使其从标准输入读取字符,直到遇到文件结尾。对美个字符 程序需要检查并报告改字符是否是一个字母。如果是报告字母在字符表中的位置,否则返回-1
- linux 下检查java jar包 程序是否正常 shell
- 无法应用转换程序。请检查指定的转换程序路径是否有效。
- 编写一个用栈来检查程序代码是否遗漏括号的程序