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 系统中不可或缺的工具,它提供了强大的日志管理功能,帮助管理员高效管理系统日志文件。通过合理配置,你可以确保日志文件不会占用过多的磁盘空间,同时保留有用的历史记录。
如果你有更具体的配置需求或遇到任何问题,随时可以继续提问!
发表回复