1. 程式人生 > >linux的日誌監控和定期處理指令碼

linux的日誌監控和定期處理指令碼

具體場景:伺服器產生的日誌量非常大,每天將近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