目前生產有一臺數據庫冷備服務器,數據庫備份天天經過rsync傳到該機上,爲了方便檢查是否冷備正常,就利用有限的知識弄了個頁面顯示(可憐大學只學了一下可憐的asp.net 2.0),實現的方式是shell+html。寫這個腳本的時候shell也是剛學,那時連加郵件、短信報警都沒,囧!,如今回頭看那個腳本,本身都以爲很搞笑,不知道你們有沒有這種感受...幸虧如今後知後覺,努力自學pythoning...css
先看下最終效果圖:html
腳本內容:python
- -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
腳本介紹:mysql
- [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文件:web
- [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點執行sql
腳本是剛開始學的時候寫的,寫的很戳,但我以爲思路仍是挺不錯的,等我學好python,必定要用python+mysql來實現各類DIY。shell