logrotate 的 rotate 参数仅控制保留归档文件数量,需结合 daily/weekly/monthly 和 maxage 才能实现按天数精准保留;maxage 按修改时间强制清理超期文件,与 rotate 叠加生效;应为不同业务配置独立规则并用 -d/-f 验证。

Logrotate 的 rotate 参数本身只控制“保留多少个归档日志文件”,不直接指定“保留多少天”——但你可以通过组合 rotate、daily/weekly/monthly 和 maxage 实现按业务需求差异化设置日志保留周期。
理解 rotate 与时间策略的关系
rotate N 表示最多保留 N 个压缩后的历史日志(如 app.log.1.gz, app.log.2.gz…),但它不感知时间。真正决定“能留多久”的,是日志轮转频率(daily 等)和归档文件的生命周期(maxage)。
例如:
- daily + rotate 7 → 理论上最多保留最近 7 天的日志(前提是每天成功轮转);
- weekly + rotate 4 → 最多保留最近 4 周的日志;
- 但若某天没触发轮转(比如服务停了一周),rotate 7 仍只留 7 个文件,可能跨时长更久——这时需 maxage 补位。
用 maxage 强制按天数清理(推荐核心手段)
maxage N 是按“文件最后修改时间”计算的硬性上限:所有归档日志文件若距今超过 N 天,无论是否满 rotate 数量,都会被删除。它和 rotate 是叠加生效的(取更严格者)。
- 高频率日志(如 API 访问日志):设
daily+rotate 14+maxage 14→ 确保最多存 14 天 - 低频关键日志(如审计日志):用
weekly+rotate 12+maxage 90→ 至少存 12 周,但绝不超 90 天 - 调试类临时日志:可设
daily+rotate 3+maxage 3,快速释放空间
为不同业务配置独立规则(/etc/logrotate.d/ 下分文件)
不要把所有业务塞进一个配置块。为每个业务建单独文件(如 /etc/logrotate.d/app-api、/etc/logrotate.d/auth-service),内容示例:
/var/log/myapp/api/*.log {
daily
missingok
rotate 30
maxage 30
compress
delaycompress
sharedscripts
postrotate
systemctl kill -s USR1 myapp-api 2>/dev/null || true
endscript
}
同理,给后台任务服务写:
/var/log/myapp/batch/*.log {
weekly
missingok
rotate 8
maxage 60
compress
create 644 root root
}
这样各业务互不影响,升级或排查时也容易定位。
验证与调试技巧
配置后务必测试,避免误删或堆积:
- 用
logrotate -d /etc/logrotate.d/app-api查看模拟执行过程(-d 是 debug 模式,不真实操作) - 加
force强制立即轮转一次:logrotate -f /etc/logrotate.d/app-api - 检查
/var/lib/logrotate/status中记录的最后轮转时间,确认是否按预期触发 - 对重要业务,首次上线前先用
maxage设小值(如 1)跑一天,确认清理逻辑无误再调大


















