linux的日誌監控和定期處理指令碼
阿新 • • 發佈:2018-12-10
具體場景:伺服器產生的日誌量非常大,每天將近100M+的日誌量,所以博主寫了一個日誌的分隔指令碼;每隔2小時執行一次,當日志文件超過6M時,將日誌進行轉存,命名格式為20180917-12.log,這樣可以防止單個日誌檔案過大,開啟時非常耗CPU,【曾經測試在linux上開啟1G的純文字檔案,2G記憶體 雙核虛擬機器幾乎崩潰,CPU瞬間飈滿;在Windows下更打不開】所以將日誌進行切割轉存,但由於日誌量太大,所以要進行定期清除日誌,規則:當所有日誌檔案超過3G時,刪除掉日期最早的日誌檔案,這樣可以保證硬碟空間的相對穩定,也保留最近期的日誌檔案。具體實現指令碼如下:
#!/bin/bash
#log.sh
#獲取所有日誌檔案的總大小,單位M[此處假設,所有日誌存在/mnt/log路徑下]
size_all=`du -s -m /mnt/log/ | awk '{print $1}'`
date=88888888
#當/mnt的總容量大於200M時,刪除最早建立的日誌檔案
if [[ $size_all -gt 3000]]; then
for i in `ls /mnt/log/`; do
date_i=`echo $i | cut -d '-' -f 1`
#通過迴圈獲取最小日期的日誌檔案
if [[ $date_i -lt date ]]; then
date=$date_i
fi
done
#如果上面執行成功,刪除掉我們獲取到的最小日期的日誌檔案
if [[ $?==0 ]]; then
rm -rf /mnt/log/$date*.log
fi
fi