minage 是 logrotate 中控制归档日志删除门槛的关键参数,指定文件修改时间满 n 天后才允许被删,与 rotate、maxage 独立生效,常用于防止半成品日志误删或满足合规性要求。

minage 是 logrotate 中一个常被忽略但非常关键的配置项,它能防止日志在“太年轻”时就被误删——尤其适用于日志生成不规律、或需确保归档文件已充分写入再进入清理流程的场景。
minage 的作用机制
minage N 表示:只有当归档日志文件的修改时间(mtime)至少为 N 天前,才允许被 logrotate 删除。
它不是控制轮转时机,而是给“删除动作”加一道年龄门槛。与 maxage(最老可保留天数)和 rotate(保留数量)配合使用时,三者逻辑独立、共同生效:
-
rotate 7→ 最多留 7 个归档(按轮转顺序) -
maxage 30→ 所有归档若创建/修改超 30 天,立即删 -
minage 2→ 归档必须存在满 2 天,才“有资格”被删(哪怕它已排在第 8 个,或已超 30 天,只要不满 2 天,就跳过)
⚠️ 注意:
minage检查的是文件的 mtime(最后修改时间),即该归档完成写入并关闭的时间,通常就是轮转发生的那一刻。不是创建时间(ctime),也不是当前系统时间。
什么情况下必须用 minage?
- 日志服务重启频繁,导致某次轮转后文件只写了几行就停止,你不想立刻删掉这个“半成品”归档
- 使用
copytruncate时,原始日志被清空但归档刚生成,立刻删可能丢失尚未 flush 的缓冲日志 - 配合
delaycompress+compress,希望压缩前至少保留 1 天,避免刚轮完就压、压完就删 - 审计类日志要求“归档落地满 24 小时后才纳入清理队列”,满足合规性检查
实际配置示例(Nginx 访问日志)
/var/log/nginx/access.log {
daily
missingok
rotate 14
minage 1 # 至少存在满 1 天才允许被删
maxage 30 # 超过 30 天强制删(不管 minage)
compress
delaycompress
notifempty
sharedscripts
postrotate
[ -f /run/nginx.pid ] && kill -USR1 $(cat /run/nginx.pid)
endscript
}
✅ 效果:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 每天轮转,最多存 14 个归档
- 即使某天没流量、access.log 为空未轮转,已有归档也不会因
maxage 30突然被删——除非它真满 30 天 且 已满 1 天 - 第 15 个归档诞生时,最老的那个若刚满 24 小时(即
minage 1满足),才会被删;若它昨天才轮出(mtime = 23h),则跳过,继续保到明天
验证与调试技巧
- 查看归档文件 mtime:
stat -c "%n %y" /var/log/nginx/access.log.1.gz
- 强制运行并观察行为(测试用):
logrotate -v -d /etc/logrotate.d/nginx
输出中会明确提示 “skipping
(minage not met)” 或 “removing (minage met)”。 - 状态文件
/var/lib/logrotate/status不记录minage判断,它只存上次轮转时间,minage完全依赖文件系统 mtime。
不复杂但容易忽略










