功能描述:清理/var/log/路徑下的messages曆史日志檔案(messages-date),但不清理messages檔案本身
依賴要求:伺服器上安裝了bc子產品
1 # clean_logs.sh
2 #!/bin/bash
3
4 # ==========================================
5 # 功能:清理/var/log/路徑下的messages曆史日志檔案(messages-date),但不清理messages檔案本身
6 # 方法:配合crontab作為定時任務每天執行
7 # 傳回:無
8 # 警告:禁止直接删除/var/log/messages檔案
9 # 日期:2018-04-23
10 # By:HackHan
11 # 其他:無
12 # ==========================================
13
14 # 建立儲存曆史日志清除記錄的檔案/opt/cleanlogs/clean_log.log
15 createLogFile()
16 {
17 targetDir=$1
18 targetFile=$2
19
20 if [ ! -d $targetDir ];then
21 mkdir -p $targetDir
22 fi
23
24 if [ ! -f $targetFile ];then
25 touch $targetFile
26 fi
27 }
28
29 # 将資訊寫入日志檔案中
30 logToFile()
31 {
32 msg=$1
33 targetFile=$2
34 echo $msg >> $targetFile
35 }
36
37 # 擷取根目錄磁盤使用率和剩餘可用空間大小,以數組形式傳回
38 getRootDirUsageRate()
39 {
40 usagepcent=`df / -h | awk '$6=="/"{sub("%","",$5);print $5}'`
41 availDisk=`df / -h | awk '$6=="/"{print $4}'`
42 array=($usagepcent $availDisk)
43 echo ${array[*]}
44 }
45
46 # 根據輸入的實際磁盤使用率、實際可用大小、使用率門檻值、預期可用磁盤空間門檻值判斷是否符合要求
47 # 傳回1表示符合要求,傳回0表示不符合要求
48 isDiskUsageOK()
49 {
50 # 實際使用率,去掉%後的數字
51 usagepcent=$1
52 # 實際可用磁盤空間,機關可能是K/M/G
53 availDisk=$2
54 # 使用率門檻值,去掉%後的數字
55 threshHoldPcent=$3
56 # 可用磁盤空間門檻值,無機關(表示G)
57 threshHoldAvailDisk=$4
58
59 if [ ${availDisk:0-1} = "g" -o ${availDisk:0-1} = "G" ]
60 then
61 availDiskNoUnit=`echo $availDisk|awk '{sub(/.$/,"")}1'`
62
63 if [ `echo "$usagepcent > $threshHoldPcent" | bc` -eq 1 ] || [ `echo "$availDiskNoUnit < $threshHoldAvailDisk" | bc` -eq 1 ]
64 then
65 echo "0"
66 else
67 echo "1"
68 fi
69
70 else
71 echo "0"
72 fi
73
74 }
75
76 # 生成的日志目錄
77 targetDir="/opt/cleanlogs/"
78 # 生成的日志檔案
79 targetFile="${targetDir}clean_log.log"
80 # 待删除檔案所在路徑
81 targetLogDir="/opt/shell/logs/"
82 # targetLogDir="/var/log/"
83
84 # 可用磁盤空間門檻值,機關預設為G
85 availDiskThresh=10
86 # 磁盤使用率,機關預設為%
87 diskUsagePcent=90
88
89
90 createLogFile $targetDir $targetFile
91
92 result=(`getRootDirUsageRate`)
93
94 beginCleanTime=`date '+%Y-%m-%d %H:%M:%S'`
95
96 logToFile "===========================================" $targetFile
97 logToFile "[***] Scanning time : ${beginCleanTime}" $targetFile
98 logToFile "/ Disk info: Avail:${result[1]} Use%:${result[0]}%" $targetFile
99 logToFile "-------------------------------------------" $targetFile
100
101
102
103 isOK=`isDiskUsageOK ${result[0]} ${result[1]} $diskUsagePcent $availDiskThresh`
104
105 if [ $isOK = "0" ]
106 then
107
108 logToFile "[+] Starting to clean logs ..." $targetFile
109
110 for item in `ls ${targetLogDir}messages-*`;do
111 #rm -f $item
112 echo $item
113 logToFile $item $targetFile
114 done
115
116 logToFile "[-] Ended cleaning logs !" $targetFile
117 fi
118
119 endCleanTime=`date '+%Y-%m-%d %H:%M:%S'`
120
121 logToFile "[***] Ended time: ${endCleanTime}" $targetFile
122
123 logToFile "===========================================" $targetFile
124 logToFile "" $targetFile
要實作定時執行,需要建立crontab計劃。例如,我們想每隔1個小時執行該日志清除程式,假設該可執行檔案存放路徑為/opt/shellutils/clean_logs.sh,那麼建立crontab如下:
# crontab -e
* */1 * * * /opt/shellutils/clean_logs.sh >> /opt/cleanlogs/clean_log.log 2>&1