監控目錄備份是否成功通用指令碼backup_monitor.sh

fjzcau發表於2016-01-08
1、定義要監控的主機資訊 backup_monitor.ini
指令碼:cat /Data/ftpuser01/scripts/backup_monitor.ini
  1. ####################################################################################
  2. # 備份目錄解析:
  3. # BackupDir=/Data/ftpuser01/10.1.4.48 備份伺服器上的路徑,對應主機host3的備份上傳路徑。
  4. # private_ip=10.1.1.96 用內網標識主機IP地址。
  5. # hostname=host3 主機名
  6. # SourceDir=/Data/jenkins/system,Kafka-Consumer 源主機要備份打包的目錄
  7. ####################################################################################


  8. #定義要備份的目錄全路徑
  9. declare -a i_bak_object_dir_array=(
  10.   "BackupDir=/Data/ftpuser01/10.1.1.96 hostname=host1 private_ip=10.1.1.96 SourceDir=/datacenter"
  11.   "BackupDir=/Data/ftpuser01/10.1.2.67 hostname=host3 private_ip=10.1.2.67 SourceDir=/datacenter"
  12.   "BackupDir=/Data/ftpuser01/10.1.4.48 hostname=host3 private_ip=10.1.4.48 SourceDir=/Data/jenkins/system,Kafka-Consumer"
  13.   "BackupDir=/Data/ftpuser01/10.1.1.86 hostname=host4 private_ip=10.1.1.86 SourceDir=/Data/verComponent"
  14. )
2、檢查當天備份與前一天備份大小(通用)
 檢查原則:

  1)當天備份小於4K

  2)當天備份與前一天備份比值小於0.1

 以上條件只要一個符合,則當天備份失敗,指令碼返回 1;備份成功,返回 0。

  1. #!/bin/sh

  2. ######################################################################
  3. # 執行方式,假設要檢查host3的備份情況:
  4. # /Data/ftpuser01/scripts/backup_monitor.sh 1
  5. ######################################################################

  6. #初始化備份資訊
  7. . /Data/ftpuser01/scripts/backup_monitor.ini

  8. i=$1
  9. # 沒有引數,或引數大於等於陣列小標則報錯
  10. if [ $# -le 0 ]
  11. then
  12.   echo "Usage1:$0 [0,${#i_bak_object_dir_array[@]})"
  13.   exit 1
  14. elif [ $1 -ge ${#i_bak_object_dir_array[@]]
  15. then
  16.   echo "Usage2:$0 [0,${#i_bak_object_dir_array[@]})"
  17.   exit 2
  18. fi

  19. i_info=${i_bak_object_dir_array[$i]}

  20.  #獲取備份所在的目錄
  21. i_backup_dir=`echo ${i_bak_object_dir_array[$i]}|awk '{print $1}' | awk -F'=' '{print $2}'`
  22.  
  23.  #獲取前一天備份大小
  24. cd $i_backup_dir
  25. i_lastday=`date '-d -1day' +'%Y%m%d'`
  26. i_size_lastday=`du -sb ${i_lastday}* |awk '{print $1}'`
  27. echo "-->1 size_lastday=$i_size_lastday" > /dev/null
  28.  
  29.  #獲取當天備份大小
  30. i_today=`date +'%Y%m%d'`
  31. i_size_today=`du -sb ${i_today}* |awk '{print $1}'`
  32. echo "-->2 size_today=$i_size_today" > /dev/null

  33.  #當天備份與前一天備份比值
  34. i_size_ratio=`awk 'BEGIN{printf "%.2f\n",('$i_size_today' / '$i_size_lastday')}'`

  35. #備份大小:今天與昨天比值小於0.1,很可能今天備份失敗。或者,今天備份大小隻有4096位元組,肯定沒有備份成功.
  36. if [ $( echo "$i_size_ratio < 0.1"|bc ) -eq 1 -o $i_size_today -le 4096 ]
  37. then
  38.   i_res=3
  39. else
  40.   i_res=0
  41. fi

  42. echo "SystemInfo==>$i_info,size_today=$i_size_today(Bytes)"

  43. exit $i_res
3、目錄示例
[root@host1 ftpuser01]# tree /Data/ftpuser01/10.1.1.96
/Data/ftpuser01/10.1.1.96
|-- 20160105_10.1.1.96
| |-- 10.1.1.96_20160105_tar.log
| |-- backup_dir.sh
| `-- datacenter.20160105.tar.gz
|-- 20160106_10.1.1.96
| |-- 10.1.1.96_20160106_tar.log
| |-- backup_dir.sh
| `-- datacenter.20160106.tar.gz
|-- 20160107_10.1.1.96
| |-- 10.1.1.96_20160107_tar.log
| |-- backup_dir.sh
| `-- datacenter.20160107.tar.gz
`-- 20160108_10.1.1.96
    |-- 10.1.1.96_20160108_tar.log
    |-- backup_dir.sh
4、小結:
1、du命令
  1. du -sb * 統計當前目錄下各檔案或目錄的大小,單位:Byte
  2. du -s * 預設單位是KB
  3. du -sh * print sizes in human readable format (e.g., 1K 234M 2G),單位是可讀性較好的方式,簡單說就是,單位自動選擇原則:
  4.   1)GB:大於1024MB
  5.   2)MB:大於1024KB小於1GB
  6.   3)KB:大於1024Byte小於1MB
2、浮點數計算
  1. 比如:
  2. num1=2
  3. num2=3
  4. num3=`expr $num1 / $num2`
  5. 這個時候num3=0,因為expr不支援浮點除法
  6. 解決的方法:

  7. 1)bc處理
  8. num3=`echo "sclae=2; $num1/$num2" | bc`
  9. 使用bc工具,sclae控制小數點後保留幾位

  10. 2)awk處理
  11. awk 'BEGIN{printf "%.2f\n",('$num1'/'$num2')}'
  12. 如果用百分比表示
  13. awk 'BEGIN{printf "%.2f%\n",('$num1'/'$num2')*100}'
3、浮點數比較
  1. if [ $(echo "0.15 < 0.20"|bc) -eq 1 ]
  2. then
  3.   echo "0.15 <= 0.20"
  4. else
  5.   echo "Error"
  6. fi

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22661144/viewspace-1973710/,如需轉載,請註明出處,否則將追究法律責任。

相關文章