logrotate 通过 rotate、轮转频率(daily/weekly/monthly)和 maxage 协同实现最大保留周期;maxage 按修改时间硬性删除超期文件,与 rotate 共存时取更严格约束,并建议按业务独立配置、及时验证。

logrotate 本身没有“最大保留周期”这个独立参数,但可以通过 rotate + 时间策略(daily/weekly/monthly)+ maxage 三者组合,精准控制归档日志的最长保留时长。关键不是只设一个值,而是让它们协同生效。
用 maxage 强制按天数清理(最可靠)
maxage 是实现“最大保留周期”的核心手段——它按归档文件的最后修改时间硬性删除超期文件,不依赖轮转是否发生。
- 例如:
maxage 30表示所有归档文件(如 app.log.1.gz、app.log.2.gz)只要距今超过 30 天,不管还剩几个,一律删除 - 它和 rotate 同时存在时,取更严格者:比如
rotate 14+maxage 30,最终保留的是“最多 14 个文件”和“全部不超 30 天”中更短的那个约束 - 特别适合防止因服务中断、轮转失败导致旧日志意外长期残留
搭配轮转频率,让保留逻辑可预期
单纯靠 maxage 能保底线,但结合轮转频率(daily/weekly/monthly),才能让保留周期稳定、可估算:
-
daily + rotate 7 + maxage 7→ 理论上每天一份,最多存 7 份,且任何一份超 7 天就删,双重保障留满 7 天 -
weekly + rotate 8 + maxage 60→ 至少保留最近 8 周,但绝不允许任何归档超过 60 天(比如某周没轮转,也不会破例) - 注意:
monthly在默认 cron 每日执行下,实际仍是每天检查,只要满足条件(如 size 或时间到)就会轮转,并非真等到每月 1 号才动
为不同业务单独配置,避免互相干扰
不要把所有日志塞进一个规则。在 /etc/logrotate.d/ 下为每个业务建独立文件,例如:
-
/etc/logrotate.d/app-api:高频访问日志,配daily rotate 14 maxage 14 -
/etc/logrotate.d/auth-audit:合规审计日志,配weekly rotate 12 maxage 90 -
/etc/logrotate.d/debug-trace:调试日志,配daily rotate 3 maxage 3
验证和触发清理
改完配置不会立即清理旧文件,必须主动触发或等待下次 cron 执行:
- 模拟运行:
sudo logrotate -d /etc/logrotate.d/app-api查看是否识别路径、时间、maxage 是否生效 - 强制执行一次:
sudo logrotate -f /etc/logrotate.d/app-api,立刻应用新规则并清理超期归档 - 检查清理效果:
ls -lt /var/log/app/*.gz | head -10看最新归档时间,find /var/log/app/ -name "*.gz" -mtime +30确认无超期文件残留











