logrotate日志轮转

logrotate旨在简化对生成大量日志文件的系统的管理。它允许自动转储,压缩,删除和发送日志文件。每个日志文件可以在每天、每周、每月或日志文件达到一定大小时处理。

安装

主流Linux发行版上都默认安装了logrotate。如果没有,可以使用下面的命令安装:

  • Debian/Ubuntu:
apt install logrotate cron
  • Fedora/CentOS/RHEL:
yum install logrotate crontabs

配置

配置文件路径

  1. /etc/logrotate.conf,为全局配置,通常不需要要修改;
  2. /etc/logrotate.d/目录下,为各应用的具体配置,通常以应用程序名称来命名文件。

配置参数

以12306轮询的配置为例(/etc/logrotate.d/12306):

/home/chi/12306/query.log {
    daily
    rotate 20
    dateext
    copytruncate
    missingok
    notifempty
    create 644 chi chi
}
  • daily:日志切割的执行周期。可以为”daily”、”weekly”、”monthly”或者”yearly”。
  • rotate 20:最多保留20个日志备份。第21个日志备份文件生成时,最早的日志备份将被删除。
  • dateext:日志文件切割时文件名后缀添加日期,形如query.log-20180210,日期格式可在/etc/logrotate.conf中配置。不加该参数时,默认添加阿拉伯数字后缀。
  • copytruncate:使用该参数后,拷贝原日志文件作为备份,并且将原文件清空。优点是兼容性好,缺点是拷贝和清空之间的时间差会丢数据。如果没有配置该选项,默认的方式是,把旧日志文件改名为备份文件名 ,然后创建新日志文件,并告知应用程序使用新的描述符。
  • missingok:在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
  • notifempty:如果日志文件为空的话,不转储。
  • create 644 chi chi:使用指定的文件模式创建新日志文件。

运行

Logrotate是基于CRON来运行的,其脚本是/etc/cron.daily/logrotate,日志轮转是系统自动完成的。

题外话,不同cron任务的执行时间分别为:

  • /etc/cron.daily/ 下面的任务都是每天6:25 执行;
  • /etc/cron.weekly/ 下面的任务都是每周日 6:47 执行;
  • /etc/cron.monthly/ 下面的任务都是每月1号 6:52 执行;

因此默认情况下,日志转储都在早上6:25执行。

自动运行

无需任何设置。logrotate每天会执行一次,检查是否需要做日志转储。

手动运行

如果想自定义运行时间,那么可以将logrotate加入到cron定时任务中去。由于logrotate每天至多执行一次的原则,我们自己加入到cron中的定时任务执行后,自动运行的任务就不会执行了。

当然这要求我们自己任务的执行时间在6:25之前,否则需要删除/etc/cron.daily/logrotate阻止其自动运行才可以。

⚠️:定义的任务必须是root用户的定时任务,格式为:

 /usr/sbin/logrotate /etc/logrotate.d/web_roteate -fv

Reference

  1. Linux 日志定时轮询流程详解
  2. Linux日志文件总管——logrotate
  3. logrotate 使用方法
目录