2018/07/10

logrotate

之前就很好奇為什麼只要指定到 var log 下的檔案就會自己拆分,後來才知道原來是 server 固定時間會跑 logrotate 這個指令,理解這個指令對管理自己的 log 檔案有非常大的幫助。

常用參數

  • daily | weekly | monthy 更新頻率
  • dateext 檔案補上 rotate 的日期
  • missingok 如果找不到 log 檔沒關係
  • rotate 4 表示保留 4 份檔案
  • compress 表示壓縮起來,預設用 gzip
  • delaycompress 表示延後壓縮直到下一次 rotate
  • ifempty 即使是空文件也轉儲,這個是 logrotate 的預設值
  • notifempty 如果是空文件的話不做動
  • copytruncate 採用複製一份再清空原本的 Log File,滿足某些服務無法直接更名 Log File 來實現 Rotate 功能
  • size size 當日誌文件到達指定的大小時才做動,bytes(預設值)及 KB 或 MB
test.conf
/var/www/test/log/*.log {
    daily
    rotate 4
    missingok
    dateext
    size 10
}

我在 /var/www/test/log 裡面建立了一個 a.log,檔案大小為 43k,然後執行 logrotate -v test.conf,得到了 a.log-20180709 這個檔案,表示切割已經成功了。

可以把配置放到 /etc/logrotate.d/ 目錄下,crontab 會每天執行 logrotate 的工作,該工作會掃描這個資料夾,因此你的配置就會被執行,相關執行時間可以查 /etc/crontab,如果你想要特定時間獨立執行這個配置的話,就是放在一個指定的位置,然後自己加到 crontab 裡面。

詳細的使用參數可以參考 logrotate 的設定翻譯

注意

若要使用 script 做後續處理,有設定壓縮檔案的話建議使用 lastaction/endscript,才會真正等到檔案壓縮完成後處理內容。

沒有留言: