14. 日誌歸檔

最愛喝酸奶發表於2019-02-02

在Linux系統中有日誌切割的工具logrotate ,它可以按照我們的要求按時間或者按大小來切割和歸檔老的日誌,它還可以壓縮切割後的日誌,也可以定義老日誌保留的時間。本案例的需求是通過一個shell指令碼來實現類似logrotate的功能。

具體要求如下:

1)要處理的日誌路徑是 /data/logs/1.log ;

2)每天0點0分切割日誌;

3)老日誌保留一週;

4)歸檔後的日誌名字為 1.log.1 ,1.log.2 ,... ,1.log.7 ;

5)假設日誌歸檔後,新日誌可以自動生成。

參考指令碼如下:

#!/bin/bash
#日誌切割歸檔

logdir=/data/logs/

#如果檔案存在則刪除
e_df()
{
    if [ -f $1 ]
    then
        rm -rf $1
    fi
}

cd $logdir

#從7到2,依次遍歷迴圈
for i in `seq 7 -1 2`
do
    i2=$[$i-1]
    
    e_df 1.log.$i
    
    if [ -f 1.log.$i2 ]
    then
        mv 1.log.$i2 1.log.$i
    fi
done

e_df 1.log.1
mv 1.log 1.log.1

新增計劃任務:

0 0 * * * /bin/bash /usr/sbin/log_file.sh           #每天0點0分執行任務

此外,還可以按照日誌大小來歸檔,使用 du -sm 命令,對超過指定大小的日誌進行歸檔處理。


相關文章