目录

logrotate 日志转储

安装

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

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

配置

配置文件路径

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

配置参数

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

1
2
3
4
5
6
7
8
9
/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 用户来设置 crontab,格式为:

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

参考