记录档在遇到问题时, 对于找出出问题及除错十分有用。但由于记录档不断储存后, 所占用的硬盘空间会越来越多, 所以便有了纪录档轮替的工具, 而 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 的常用设定方法。