目前生产有一台数据库冷备服务器,数据库备份每天通过rsync传到该机上,为了方便检查是否冷备正常,就利用有限的知识弄了个页面显示(可怜大学只学了一下可怜的asp.net 2.0),实现的方式是shell+html。写这个脚本的时候shell也是刚学,那时连加邮件、短信报警都没,囧!,现在回头看那个脚本,自己都觉得很搞笑,不知道大家有没有这种感觉...幸好现在后知后觉,努力自学pythoning...
先看下最终效果图:
脚本内容:
- -rwxr-xr-x 1 root root 96 2012-02-19 bottom.sh
- -rwxr-xr-x 1 root root 3554 02-02 16:36 CheckBackup.sh
- -rwxr-xr-x 1 root root 802 2012-02-20 head.sh
- -rwxr-xr-x 1 root root 865 12-22 12:10 oldlist.sh
脚本介绍:
- [root@localhost CheckBackup]# cat bottom.sh
- #!/bin/bash
- #输出html底部信息
- main()
- {
- echo "</table>"
- echo "</div>"
- echo "</body>"
- }
- main
- [root@localhost CheckBackup]# cat CheckBackup.sh
- #!/bin/bash
- #time: 2012-02-17
- #author: reed
- #func: 生产数据库备份检查
- #define
- #脚本存放路径
- ShellPath=/usr/BAK-database/CheckBackup
- #页面存放处
- DPath=/usr/apache-tomcat-6.0.32/webapps/ROOT/ShowCheckBackup
- [ ! -d $DPath ] && mkdir -p $DPath
- #生产的主文件名
- FileName=ShowCheckBackup.html
- #前一天的文件名
- BAKFileName=ShowCheckBackup`date -d"1 day ago" +%y%m%d`.html
- #获取当前检查日期
- CheckDate=`date +'%Y-%m-%d_%H:%M:%S'`
- #数据库备份的目录
- FilePath=/usr/BAK-database
- #当前备份的文件名
- CurrentFile=`date +%y%m%d`.sql.tar.gz
- #CurrentFile=120218.sql.tar.gz
- #备份前一天的备份信息
- if [ ! -f $ShellPath/$BAKFileName ];then
- mv $ShellPath/$FileName $ShellPath/$BAKFileName
- cp -r $ShellPath/$BAKFileName $DPath
- fi
- #检查备份情况函数(主函数)
- CheckBackup()
- {
- echo -e "<tr>"
- #echo -e "<td><span>$CheckDate</span></td>"
- cd $FilePath/$1
- # 注:如果以后要新增系统,分别在后面加上相应的选项
- case $1 in
- 'WEBP')
- db_name='前置数据库';;
- 'WEBP-ZJ')
- db_name='前置数据库(浙江)';;
- 'ecard')
- db_name='汇卡数据库';;
- 'dbebs')
- db_name='企业E卡数据库';;
- 'tas')
- db_name='转账通系统数据库';;
- 'oracle')
- db_name='清算系统数据库';;
- 'monitor')
- db_name='反洗钱系统数据库';;
- 'order')
- db_name='客户端前置数据库';;
- 'GUOANSP')
- db_name='增值平台数据库';;
- 'dg77')
- db_name='三合一商户管理系统';;
- 'youyicheng')
- db_name='优易城';;
- esac
- fsize=`ls -tl |grep "$2$CurrentFile"|awk '{print $5}'`
- if [ ! -f $2$CurrentFile ] || [ $fsize -lt 1000 ];then
- echo -e "<td colspan="4" id='td1'>文件[<span id='span2'>$2$CurrentFile</span>]不存在!数据库[<span id='span2'>$db_name</span>]备份出现异常,请检查!</td>"
- #发报警短信
- $ShellPath/info_takeok.sh "$db_name备份异常,请检查" &>/dev/null
- else
- #输出数据库名称
- echo -e "<td><span>$db_name</span></td>"
- #获取数据库目录大小
- dirsize=`du -sh $FilePath/$1|awk '{print$1}'`
- echo -e "<td><span>$dirsize</span></td>"
- #输出备份文件名
- echo -e "<td><span>$2$CurrentFile</span></td>"
- #获取文件大小
- fsize=`ls -thl |grep "$2$CurrentFile"|awk '{print $5}'`
- #输出文件大小
- echo -e "<td><span>$fsize</span></td>"
- echo -e "<td><span id='span1'>正常</span></td>"
- echo -e "</tr>"
- #输出所在分区空间
- #dsize=`df -kh /usr/`
- #echo -e "<tr>"
- #echo -e "<td colspan="5">$dsize</td>"
- #echo -e "</tr>"
- fi
- }
- #输入参数,检查每个数据库备份情况
- #注:第一个参数为备份的数据库目录,第二个参数为备份的文件名头
- #如:浙江前置的数据库备份目录为WEBP-ZJ,文件名为WEBP120218.sql.tar.gz,则输入参数WEBP-ZJ和WEBP
- Check()
- {
- #打印html文件头部信息
- $ShellPath/head.sh > $ShellPath/$FileName
- CheckBackup WEBP WEBP >> $ShellPath/$FileName
- CheckBackup WEBP-ZJ WEBP >> $ShellPath/$FileName
- CheckBackup ecard ecard >> $ShellPath/$FileName
- CheckBackup dbebs dbebs >> $ShellPath/$FileName
- CheckBackup tas tas >> $ShellPath/$FileName
- CheckBackup oracle oracle_bak >> $ShellPath/$FileName
- CheckBackup monitor monitor >> $ShellPath/$FileName
- CheckBackup order client >> $ShellPath/$FileName
- CheckBackup GUOANSP GUOANSP >> $ShellPath/$FileName
- CheckBackup dg77 dg77 >> $ShellPath/$FileName
- CheckBackup youyicheng ecshop >> $ShellPath/$FileName
- #打印html文件尾部信息
- $ShellPath/bottom.sh >> $ShellPath/$FileName
- #输出往期备份列表页面
- $ShellPath/oldlist.sh
- }
- Check
- #复制打印出的文件到TOMCAT工程,显示到页面上
- CopyFile()
- {
- cp -r $ShellPath/$FileName $DPath
- cp -r $ShellPath/css.css $DPath
- }
- CopyFile
- [root@localhost CheckBackup]# cat head.sh
- #!/bin/bash
- #获取当前时间
- CheckDate=`date +'%Y-%m-%d %H:%M:%S'`
- CheckDay=`date +%A`
- #输出html文件头
- main()
- {
- echo "<body>"
- echo "<head>"
- echo "<title>汇卡生产数据库冷备检查</title>"
- echo "<link href="css.css" rel="stylesheet" type="text/css" />"
- echo "</head>"
- echo "<body>"
- echo "<div id='div1'>"
- echo "<h1>汇卡生产数据库冷备检查</h1>"
- echo "<table >"
- echo "<tr ><td colspan="5" id='td1'>检查日期:$CheckDate($CheckDay)</td></tr>"
- echo "<tr><td colspan="5" ><a href='OldList.html' target='_blank'>>>查看往期备份</a></td></tr>"
- echo "<tr id='tr2'>"
- #echo "<td>检查日期</td>"
- echo "<td>数据库名称</td>"
- echo "<td>当前备份目录大小</td>"
- echo "<td>当前备份文件名</td>"
- echo "<td>当前备份文件大小</td>"
- echo "<td>当前备份状态</td>"
- echo "</tr>"
- }
- main
- [root@localhost CheckBackup]# cat oldlist.sh
- #!/bin/bash
- SavePath=/usr/apache-tomcat-6.0.32/webapps/ROOT/ShowCheckBackup
- cd $SavePath
- #获取目录大小
- #SaveFile=`ls -tl |grep "ShowCheckBackup"|awk '{print $9}'`
- SaveFile=`ls -t |grep Show`
- FilePath=/usr/BAK-database
- OldListFile=OldList.html
- #输出往期备份页面
- main()
- {
- echo "<body>"
- echo "<head>"
- echo "<title>汇卡生产数据库冷备检查[往期备份列表]</title>"
- echo "<link href="css.css" rel="stylesheet" type="text/css" />"
- echo "</head>"
- echo "<body>"
- echo "<div id='div1'>"
- echo "<h1>汇卡生产数据库冷备检查</h1>"
- echo "<table>"
- echo "<tr >"
- echo "<td id='td1' colspan="2">往期备份情况</td></tr>"
- for SFile in $SaveFile;do
- echo "<tr>"
- echo "<td><a href='$SFile' target='_blank'>$SFile</a></td>"
- echo "</tr>"
- done
- echo "</table>"
- echo "</div>"
- echo "</body>"
- }
- main > $FilePath/$OldListFile
- cp -r $FilePath/$OldListFile $SavePath/
CSS文件:
- [root@localhost CheckBackup]# cat css.css
- #div1,table
- {
- margin:0 auto;
- text-align:center;
- }
- #tr2{
- background:#09F;
- font-weight:bold;
- color:#FFF;}
- #td1{
- #font-size:18px;
- font-weight:bold;
- color:#F00;}
- #td2{
- #font-size:24px;
- font-weight:bold;
- color:#F00;}
- #span1
- {
- font-weight:bold;
- color:#0F0;
- }
- #span2
- {
- font-weight:bold;
- }
- table,td{
- width:900px;
- border-collapse:collapse;
- border: 1px solid #666;
- padding:10px 0px 10px 0px;}
- a
- {
- text-decoration:none;
- list-style:none;
- color:#09f;
- font-weight:bolder;
- }
- a:hover
- {
- text-decoration:underline;
- color:#2367ac;
- }
最后把CheckBackup.sh脚本写到crontab,每天8点执行
脚本是刚开始学的时候写的,写的很戳,但我觉得思路还是挺不错的,等我学好python,一定要用python+mysql来实现各种DIY。