logrotate 日誌分割工具的配置使用
Logrotate是linux下的一個用於對日誌檔案分割,壓縮或者傳送郵件的的工具。當系統中的某個程序會定期生成大量的log檔案時,logrotate可以定期(每天一次,每週一次等等)自動化的將這些log檔案進行分割壓縮,刪除等操作。
一般情況下,logrotate是一個在/etc/corn.daily下的每天執行的cronjob,logrotate在一天之中也不會對log檔案進行多次的修改,除非log檔案壓縮的標準時基於檔案的大小或者使用了-f引數強制修改。
Logrotate的命令格式為:
logrotate [-dv] [-f|--force] [-s|--state file] config_file+
引數說明:
-v 輸出執行過程說明
-d 開啟debug模式
-f 強制執行操作,當我們手動修改/etc/logrotate.d目錄下的配置是,加上該引數使得修改立即生效
-s 告訴logrotate使用一個備用的狀態檔案,預設狀態檔案時/var/lib/logrotate/status
舉例說明logrotate的使用:
假設現在自己寫的一個指令碼在不斷的生成monitor.log的日誌,隨著時間的增長該日誌檔案也將變得越來越大,為了便於處理,我們不希望該日誌過大,因此我們希望該日誌按照每天一次的分割頻率分割成若干個小檔案。
首先進入/etc/logrotate.d目錄下,新建一個檔案。命名問getMap,編輯該檔案/root/zzx/monitor.log{ notifempty daily rotate 5 }
第一行:是日誌檔案所在的路徑
第二行:notifempty表示當日志文件為空的時候就不需要分割了。若為空也需要分割,則填ifempty即可。
第三行:daily表示每天一次,weekly表示每週一次,monthly表示每月一次
第四行:rotate n表示日誌在被rotate n次之後,就的日誌將被移除或者mail到配置的地址中去,如果n=0,則表示直接移除舊的檔案。
如果希望rotate僅僅在日誌檔案過大時執行,則可以加上一行
size <size>
表示在日誌檔案超過size的大小時,執行操作。
一個更復雜的例子
/data/log/keystone/*.log { daily missingok rotate 5 compress minsize 100k create 640 keystone keystone postrotate if dpkg-vendor --derives-from ubuntu ; then service keystone restart >/dev/null 2>&1 || true else invoke-rc.d keystone restart fi endscript }
其中compress表示對日誌進行壓縮操作
Create表示需要新建日誌檔案,指明使用者組和使用者以及檔案許可權
Postrotate/endscript包圍的是在rotate完成之後需要執行的指令碼,對於有些程序,需要重新啟動以便生成新的日誌檔案,否則將會出錯。其中的指令碼即為shell指令碼,按照shell指令碼的語法編寫即可。
在配置完成之後,執行:
執行logrotate:
/usr/sbin/logrotate -vf /etc/logrotate.conf
若沒有報錯,檢視/root/zzx/下面,會生成monitor.log.1檔案,說明配置成功了。