rotate 指令控制保留旧日志份数,如 rotate 5 仅保留 app.log.1 至 app.log.5,更老的自动删除;设为 0 则不保留任何旧日志;该值仅统计已轮转并压缩的归档,不含当前主日志。

直接在 logrotate 配置中用 rotate 指令就能控制保留几份旧日志,这是最核心、最常用的配置项。
在配置文件里写明 rotate 数值
logrotate 通过 rotate N(N 是正整数)决定最多保留多少个历史日志文件。比如设为 rotate 5,就只留最新的 5 个归档(如 app.log.1 到 app.log.5),再老的会被自动删除。
- 该设置可放在全局配置
/etc/logrotate.conf中,影响所有日志;也可放在服务专属配置里,比如/etc/logrotate.d/nginx - 数值为 0 表示不保留任何旧日志(即轮转后立即删掉旧文件)
- 注意:这个数量只统计“已轮转+已压缩”的归档文件,不包括当前正在写的主日志(如
access.log)
配合 compress 和 delaycompress 更稳妥
如果启用了压缩(compress),建议加上 delaycompress,避免最新一份归档被立刻压缩,导致某些服务(如 Nginx)因文件被占用而无法写入。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
-
compress:对轮转后的旧日志启用 gzip 压缩(生成 .gz 文件) -
delaycompress:让刚轮转出来的.1文件先不压缩,等下一轮轮转时再压缩成.1.gz,此时.1已变成.2,不再被服务写入 - 这样既保证了压缩节省空间,又避免了服务异常
验证是否生效
配置改完后,可以用调试模式看效果,不实际改动文件:
-
logrotate -d /etc/logrotate.conf—— 查看模拟执行过程,确认 rotate 数值是否被识别、哪些文件会受影响 -
logrotate -f /etc/logrotate.conf—— 强制立即执行一次(适合测试后验证归档数量) - 检查状态记录:
cat /var/lib/logrotate/status,里面会记录每个日志上次轮转时间,辅助判断周期是否正常
常见误点提醒
rotate 控制的是“份数”,不是“天数”或“大小”,别和 daily、size 100M 混淆:
- 即使设了
daily,若某天没产生日志,就不会触发轮转,rotate 7也不会凭空多出一个归档 - 如果日志增长极快,一天内多次达到
size 100M,logrotate 默认仍按单次触发处理(除非用maxsize配合daily) - 确保
missingok和notifempty同时存在,避免因文件缺失或为空导致轮转中断,影响 rotate 计数逻辑










