記錄檔在遇到問題時, 對於找出出問題及除錯十分有用。但由於記錄檔不斷儲存後, 所佔用的硬碟空間會越來越多, 所以便有了紀錄檔輪替的工具, 而 logrotate 便是 RHEL / CentOS 下的預設記錄檔輪替工具。
logrotate 預設會每天自動執行, 執行時會根據設定檔 /etc/logrotate.conf 對指定的記錄檔輪替, 可以是每天、每星期、按檔案大小等自動輪替, 以及會舊有的記錄檔會保存多久。
/etc/logrotate.conf 內設定了會 include 目錄 /etc/logrotate.d 的檔案, 可以將個別記錄檔的輪替設定, 在這個目錄建立新的檔案設定, 對日後的管理也較方便。
以 httpd 為例, 它的輪替設定檔在 /etc/logrotate.d/httpd, 開啟這個檔案可以查看設定的方法:
- # vi /etc/logrotate.d/httpd
以下是 /etc/logrotate.d/httpd 的內容:
1 2 3 4 5 6 7 8 9 |
/var/log/httpd/*log { missingok notifempty sharedscripts delaycompress postrotate /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true endscript } |
第一行 /var/log/httpd/*log 表示 /var/log/httpd/ 目錄下, 所有以 “log” 結尾的檔案, 以及不是空白的檔案進行輪替。
而 postrotate 及 endscript 中間的指令 (上面例子是重新載入 httpd 服務), 表示當有記錄檔進行輪替後, 會執行的指令。
以上例子沒有對記錄檔輪替進行設定, 所以會使用 /etc/logrotate.conf 的設定。
以下是一些常用設定可以自訂:
rotate:
保留多少份舊記錄檔, 預設值是 4 份舊記錄, 如果想改成 7 份舊記錄, 改成這樣:
1 2 3 4 5 6 7 8 9 10 |
/var/log/httpd/*log { rotate 7 missingok notifempty sharedscripts delaycompress postrotate /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true endscript } |
輪替間隔:
預設值是 “weekly”, 即每星期輪替一次, 可以有以下設定:
daily (每天)
weekly (每星期)
monthly (每月)
yearly (每年)
檔案大小:
另一個輪替方法是按記錄檔的體積大小, 以下是 100KB, 100MB 及 100GB 的語法:
size 100k
size 100M
size 100G
如果要將舊記錄檔用 gzip 壓縮, 可以加入以下一行:
compress
logrotate 的設定只要儲存設定檔後, 不用重啟服務, 會立即生效。
以上是 logrotate 的常用設定方法。