Linux使用某些軟體的時候會産生日志檔案,而這些軟體本身對日志不進行分割或者壓縮處理,久而久之會導緻日志檔案異常巨大,影響機器性能,配置不高的機器上尤為嚴重。而logrotate就是管理這些日志檔案的神器。
Logrotate功能
logrotate會周期性的讀,壓縮,備份,建立新的日志檔案。你想對日志檔案做的操作,它基本上可以做到。
- 防止單個日志檔案過于龐大
- 删除舊的日志檔案,以防舊日志檔案填滿你的磁盤。
- 對單個日志檔案或者某個目錄下的檔案按
/時間
進行大小
,切割
操作;指定日志儲存壓縮
;還可以在切割之後運作自定義指令。數量
許多Linux軟體都已經内置了logrotate了,例如httpd預設就使用logrotated來幫你管理日志檔案。

httpd logrotate
Logrotate配置
- 首先看logrotate軟體包的内容 logrotate包目錄
使用Logrotate管理日志
一般第三方軟體包的日志檔案管理都放在
/etc/logrotate.d
目錄下。
httpd
[root@250 nginx]# cat /etc/logrotate.d/httpd
/var/log/httpd/*log {
daily
missingok
notifempty
sharedscripts
delaycompress
postrotate
/bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
endscript
}
這份配置會處理
/var/log/httpd/
目錄下字尾為log的檔案。
- monthly: 日志檔案将按月輪循。其它可用值為‘daily’,‘weekly’或者‘yearly’。
- missingok: 在日志輪循期間,任何錯誤将被忽略,例如“檔案無法找到”之類的錯誤。
- notifempty: 如果日志檔案為空,輪循不會進行。
- sharedscripts: 在所有的日志檔案都輪詢之後運作postrotate腳本,如果沒設定預設會在每個比對的檔案輪詢之後運作一次postrotate腳本。
- compress: 在輪循任務完成後,已輪循的歸檔将使用gzip進行壓縮。
- delaycompress: 總是與compress選項一起用,delaycompress選項訓示logrotate不要将最近的歸檔壓縮,壓縮将在下一次輪循周期進行。這在你或任何軟體仍然需要讀取最新歸檔時很有用。
- postrotate/endscript: 在所有其它指令完成後,postrotate和endscript裡面指定的指令将被執行。在這種情況下,rsyslogd 程序将立即再次讀取其配置并繼續運作。
這裡解釋僅做參考,logrotate中的每個參數可單獨進行搜尋,明确具體的含義,man手冊中也有詳細說明。
排障
logrotate [-dv] [-f|--force] [-s|--state file] config_file
[root@250 nginx]# logrotate --help
用法: logrotate [OPTION...] <configfile>
-d, --debug Don't do anything, just test (implies -v)
-f, --force Force file rotation
-m, --mail=command Command to send mail (instead of `/bin/mail')
-s, --state=statefile Path of state file
-v, --verbose Display messages during rotation
-l, --log=STRING Log file
--version Display version information
- 以debug模式運作某個logrotate配置檔案 logrotate debug模式
使用Logrotate管理日志 - 強制使用logrotate近輪詢日志檔案 logrotate 強制輪詢
使用Logrotate管理日志 - logrotate記錄輪詢狀态的檔案
使用Logrotate管理日志 logrotate狀态檔案格式
記錄某輪詢日志到logrotate狀态檔案中
logrotate -vf -s /var/lib/logrotate/logrotate.status /etc/logrotate.d/httpd
最後
logrotate在日志處理上功能十分強大,但卻十分容易上手,本文隻是作為抛磚引玉的作用。在使用logrotate的時候,根據man手冊可查尋找想要了解的各種配置資訊。
希望能幫助到大家。