使用 logrotate 定期整理 Log 档案

有时候在跑一些 daemon 的时候,会遇到日志越来越大的情形。如何能做到像 apache 一样定期整理成像 xxx.1 xxx.2.gz 这样的文件呢?

这个时候就可以作到 logrotate 这个系统工作,它的配置文件在 /etc/logrotate.conf,设置方法也很简单 (参考自 Rotating Rails Log Files):

# Rotate Rails application logs
/path/to/your/current/log/*.log {
  daily
  missingok
  rotate 7
  compress
  delaycompress
  notifempty
  copytruncate
}

其中:

daily 表示每天整理,也可以改成 weekly 或 monthly
missingok 表示找不到 log 文件也无所谓
rotate 7 表示保留之前的 7 份文件
compress 表示压缩,默认用 gzip
delaycompress 表示延后到下一次 rotate 时压缩
notifempty 表示如果 log 是空的,就不 rotate
copytruncate 先复制 log 文件的内容后,再清空的作法,因為有些程序写在原来的 log 文件中,比如 rails。另一种方法是重新生成一个日志。

设置完成后,可以等到明天,或是运行 /usr/sbin/logrotate -f /etc/logrotate.conf 测试一下。