logrotate 是 Linux 系统中一个非常重要的日志管理工具,主要用于自动化管理日志文件的轮转(rotation)、压缩、删除等操作。它能确保日志文件不会无限制地增长,占用过多的磁盘空间,且能提供灵活的配置方式来满足不同的需求。下面将详细介绍 logrotate 的使用及配置方法。

1. logrotate 的工作原理

logrotate 的核心任务是定期轮换日志文件。当日志文件达到一定的大小或时间时,logrotate 会对其进行备份、压缩,并创建一个新的日志文件。

  • 轮转:日志文件被重命名为带有时间戳的备份文件(如 logfile.1)。
  • 压缩:旧的日志文件通常会被压缩以节省空间(如 logfile.1.gz)。
  • 删除:超过保留期限的日志文件会被自动删除。

2. 配置文件

logrotate 的主配置文件通常位于 /etc/logrotate.conf,而各个应用程序的日志配置通常会被放在 /etc/logrotate.d/ 目录下。默认的配置文件路径是:

  • /etc/logrotate.conf:主配置文件,定义了全局的配置规则。
  • /etc/logrotate.d/:目录,用于存放单独服务或程序的日志配置。

3. 配置示例

3.1 主配置文件 /etc/logrotate.conf

主配置文件通常包含全局配置项,以及引入 /etc/logrotate.d/ 目录下的其他配置文件。

# /etc/logrotate.conf
weekly                # 每周轮转一次
rotate 4              # 保留 4 个轮换文件
create 0640 root utmp # 新建日志文件时,设置权限和所有者
include /etc/logrotate.d

3.2 服务日志配置文件 /etc/logrotate.d/

每个服务或应用的日志轮转通常会在 /etc/logrotate.d/ 中单独配置。例如,/etc/logrotate.d/nginx 配置 Nginx 日志轮转:

# /etc/logrotate.d/nginx
/var/log/nginx/*.log {
    daily                  # 日志每日轮转
    missingok              # 如果日志文件不存在,不报错
    rotate 14              # 保留 14 个轮转日志文件
    compress               # 轮转时压缩旧的日志文件
    delaycompress          # 延迟压缩,保留最新的日志文件未压缩
    notifempty             # 如果日志为空,不进行轮转
    create 0640 www-data www-data  # 新日志文件的权限
}

4. 常见配置项解析

  • daily / weekly / monthly:设置轮转周期。可以是 daily(每天)、weekly(每周)或 monthly(每月)。
  • rotate N:保留最新的 N 个轮转文件,超过这个数量的日志文件会被删除。
  • compress:轮转时对旧的日志文件进行压缩(默认为 gzip)。
  • delaycompress:延迟压缩,保留最新的一个日志文件不压缩,压缩第二个日志文件。
  • create:轮转后创建新日志文件的权限和所有者。例如,create 0640 root root 表示新文件权限是 0640,所有者是 root,组是 root
  • missingok:如果日志文件不存在,忽略错误。
  • notifempty:如果日志文件为空,不进行轮转。
  • dateext:启用日期扩展,在轮转日志文件时使用日期后缀(如 logfile-2025-09-12)。
  • size:根据日志文件的大小进行轮转。例如,size 100M 表示文件大小达到 100MB 时才进行轮转。

5. 日志轮转示例

假设你有一个 access.log 文件,想要按照文件大小进行轮转,并保留最近 10 个备份文件,压缩旧日志,配置文件如下:

/var/log/access.log {
    size 100M              # 文件达到 100MB 时轮转
    rotate 10              # 保留 10 个日志备份
    compress               # 压缩轮转后的日志文件
    missingok              # 如果日志文件缺失,不报错
    notifempty             # 如果日志文件为空,不轮转
    create 0640 root root  # 新日志文件的权限和所有者
}

6. 手动运行 logrotate

你可以手动运行 logrotate 来测试配置,或者立即轮转日志文件:

sudo logrotate -d /etc/logrotate.conf   # 进行 dry-run(模拟运行),查看实际会执行什么
sudo logrotate -f /etc/logrotate.conf   # 强制轮转日志

7. 日志轮转日志

logrotate 会在 /var/lib/logrotate/status 文件中记录当前的日志轮转状态。每次轮转后,它都会更新这个文件以标记轮转的状态。

8. 使用 logrotate 的好处

  • 自动化管理:定期轮转日志文件,避免日志文件无限膨胀,节省磁盘空间。
  • 日志安全性:可以设置不同的权限、所有者,确保日志文件不会被不当访问。
  • 灵活性:可以为不同服务和应用程序设置不同的日志轮转策略。

总结

logrotate 是 Linux 系统中不可或缺的工具,它提供了强大的日志管理功能,帮助管理员高效管理系统日志文件。通过合理配置,你可以确保日志文件不会占用过多的磁盘空间,同时保留有用的历史记录。

如果你有更具体的配置需求或遇到任何问题,随时可以继续提问!