linux下定時分割日誌文件

logrotate是個十分有用的工具,它能夠自動對日誌進行分割、壓縮以及刪除舊的日誌文件。例如,你能夠設置logrotate,讓你的日誌文件每30天輪循,並刪除超過6個月的日誌。配置完後,logrotate的運做徹底自動化,沒必要進行任何進一步的人爲干預。node

主流Linux發行版上都默認安裝有logrotate包,若是出於某種緣由,logrotate沒有出如今裏頭,你可使用apt-get或yum命令來安裝。vim

# apt-get install logrotate cron
# yum install logrotate crontabs

logrotate的配置文件是/etc/logrotate.conf,一般不須要對它進行修改。日誌文件的輪循設置在獨立的配置文件中,它(們)放在/etc/logrotate.d/目錄下。工具

樣例一

因爲如今日誌文件已經準備好,咱們將配置logrotate來輪循該日誌文件。讓咱們爲該文件建立一個配置文件。post

# vim /etc/logrotate.d/log-file
/var/log/log-file {
monthly
rotate 5
compress
delaycompress
missingok
notifempty
create 644 root root
postrotate
/usr/bin/killall -HUP rsyslogd
endscript
}

這裏:spa

  • monthly: 日誌文件將按月輪循。其它可用值爲‘daily’,‘weekly’或者‘yearly’。
  • rotate 5: 一次將存儲5個歸檔日誌。對於第六個歸檔,時間最久的歸檔將被刪除。
  • compress: 在輪循任務完成後,已輪循的歸檔將使用gzip進行壓縮。
  • delaycompress: 老是與compress選項一塊兒用,delaycompress選項指示logrotate不要將最近的歸檔壓縮,壓縮將在下一次輪循週期進行。這在你或任何軟件仍然須要讀取最新歸檔時頗有用。
  • missingok: 在日誌輪循期間,任何錯誤將被忽略,例如「文件沒法找到」之類的錯誤。
  • notifempty: 若是日誌文件爲空,輪循不會進行。
  • create 644 root root: 以指定的權限建立全新的日誌文件,同時logrotate也會重命名原始日誌文件。
  • postrotate/endscript: 在全部其它指令完成後,postrotate和endscript裏面指定的命令將被執行。在這種狀況下,rsyslogd 進程將當即再次讀取其配置並繼續運行。

上面的模板是通用的,而配置參數則根據你的需求進行調整,不是全部的參數都是必要的。命令行

樣例二

在本例中,咱們只想要輪循一個日誌文件,然而日誌文件大小能夠增加到50MB。日誌

# vim /etc/logrotate.d/log-file
/var/log/log-file {
size=50M
rotate 5
create 644 root root
postrotate
/usr/bin/killall -HUP rsyslogd
endscript
}

樣例三

咱們想要讓舊日誌文件以建立日期命名,這能夠經過添加dateext常熟實現。code

# vim /etc/logrotate.d/log-file
/var/log/log-file {
monthly
rotate 5
dateext
create 644 root root
postrotate
/usr/bin/killall -HUP rsyslogd
endscript
}

這將讓歸檔文件在它們的文件名中包含日期信息。進程

排障

這裏提供了一些logrotate設置的排障提示。crontab

1. 手動運行logrotate

logrotate能夠在任什麼時候候從命令行手動調用。

要調用爲/etc/lograte.d/下配置的全部日誌調用logrotate

# logrotate /etc/logrotate.conf

要爲某個特定的配置調用logrotate:

# logrotate /etc/logrotate.d/log-file

2. 演練

排障過程當中的最佳選擇是使用‘-d’選項以預演方式運行logrotate。要進行驗證,不用實際輪循任何日誌文件,能夠模擬演練日誌輪循並顯示其輸出。

# logrotate -d /etc/logrotate.d/log-file

正如咱們從上面的輸出結果能夠看到的,logrotate判斷該輪循是沒必要要的。若是文件的時間小於一天,這就會發生了。

3. 強制輪循

即便輪循條件沒有知足,咱們也能夠經過使用‘-f’選項來強制logrotate輪循日誌文件,‘-v’參數提供了詳細的輸出。

# logrotate -vf /etc/logrotate.d/log-file


4. Logrotate的記錄日誌

logrotate自身的日誌一般存放於/var/lib/logrotate/status目錄。若是處於排障目的,咱們想要logrotate記錄到任何指定的文件,咱們能夠指定像下面這樣從命令行指定。

# logrotate -vf –s /var/log/logrotate-status /etc/logrotate.d/log-file

5. Logrotate定時任務

logrotate須要的cron任務應該在安裝時就自動建立了,能夠在如下文件中查看。

# cat /etc/cron.daily/logrotate

 

6. 最後來看一下logrotate全部經常使用的配置參數,咱們能夠進行更多個性化的日誌分割定製:

logrotate 的配置文件是 /etc/logrotate.conf  主要參數以下表:
   參數                         功能
   compress                     經過gzip 壓縮轉儲之後的日誌
   nocompress                   不須要壓縮時,用這個參數
   copytruncate                 用於還在打開中的日誌文件,把當前日誌備份並截斷
   nocopytruncate               備份日誌文件可是不截斷
   create mode owner group      轉儲文件,使用指定的文件模式建立新的日誌文件
   nocreate                     不創建新的日誌文件
   delaycompress 和 compress 一塊兒使用時,轉儲的日誌文件到下一次轉儲時才壓縮
   nodelaycompress              覆蓋 delaycompress 選項,轉儲同時壓縮。
   errors address               專儲時的錯誤信息發送到指定的Email 地址
   ifempty                      即便是空文件也轉儲,這個是 logrotate 的缺省選項。
   notifempty                   若是是空文件的話,不轉儲
   mail address                 把轉儲的日誌文件發送到指定的E-mail 地址
   nomail                       轉儲時不發送日誌文件
   olddir directory             轉儲後的日誌文件放入指定的目錄,必須和當前日誌文件在同一個文件系統
   noolddir                     轉儲後的日誌文件和當前日誌文件放在同一個目錄下
   prerotate/endscript          在轉儲之前須要執行的命令能夠放入這個對,這兩個關鍵字必須單獨成行
   postrotate/endscript         在轉儲之後須要執行的命令能夠放入這個對,這兩個關鍵字必須單獨成行
   daily                        指定轉儲週期爲天天
   weekly                       指定轉儲週期爲每週
   monthly                      指定轉儲週期爲每個月
   rotate count                 指定日誌文件刪除以前轉儲的次數,0 指沒有備份,5 指保留5 個備份
   tabootext [+] list           讓logrotate 不轉儲指定擴展名的文件,缺省的擴展名是:.rpm-orig, .rpmsave, v, 和 ~
   size size                    當日志文件到達指定的大小時才轉儲,Size 能夠指定 bytes (缺省)以及KB (sizek)或者MB (sizem).
相關文章
相關標籤/搜索