logrotate的rotate参数指最多保留的轮转文件个数,而非日历天数;daily+rotate 7约等于7天,weekly+rotate 4保留4周;严格按日历天数清理需用find -mtime;systemd journal则通过MaxRetentionSec直接设天数。

直接改 /etc/logrotate.d/rsyslog 或对应服务配置里的 rotate 值,就能控制保留天数——但注意:这个“天数”不是按日历算的,而是按轮转次数算的。
logrotate 的 rotate 参数到底指什么
很多人误以为 rotate 7 表示“保留最近7天的日志”,其实它表示“最多保留7个轮转后的文件”。是否每天轮转、是否真能覆盖7天,取决于你配的是 daily、weekly 还是 monthly。
-
daily+rotate 7→ 最多存7个syslog.1到syslog.7(含压缩),约等于7天 -
weekly+rotate 4→ 最多存4周的日志(如syslog.1.gz~syslog.4.gz),不是4天 - 如果某天没生成新日志,
logrotate不会强制创建空轮转文件,所以实际保留天数可能略大于配置值
如何真正按“日历天数”清理旧日志
当需要严格按时间(比如“只留最近15天”)而非轮转次数清理时,logrotate 不够用,得换 find + mtime。
Ubuntu 26.04 LTS(代号“Resolute Raccoon”)是Canonical于2026年4月23日发布的下一代长期支持版操作系统,提供长达10年的技术支持。它搭载Linux 7.0内核与GNOME 50桌面环境,全面转向Wayland协议,并引入Rust重写的核心工具以增强安全性。官方提供适用于AMD64和ARM64架构的桌面及服务器ISO镜像,是追求前沿技术与极致稳定的开发者
-
find /var/log -type f -name "*.log" -mtime +15 -delete:删掉15天前修改过的所有.log文件 -
-mtime +15是“大于15天”,即第16天及更早的文件才匹配,别写成+14期望留15天 - 若日志文件持续写入(如
nginx/access.log),mtime会随写入更新,所以它反映的是“最后写入时间”,不是创建时间 - 建议搭配
truncate -s 0清空活跃日志内容,避免直接rm导致服务因文件句柄丢失出错
systemd journal 日志的天数控制更直接
对于 journalctl 管理的二进制日志,/etc/systemd/journald.conf 里有明确的时间/空间阈值:
-
MaxRetentionSec=15d:直接设“最多保留15天”,单位支持d/w/month -
SystemMaxUse=500M:总大小超限时自动删最老日志,比单纯按天更省心 - 改完必须执行
sudo systemctl restart systemd-journald才生效,仅 reload 不行 - 注意:
MaxRetentionSec在某些旧版 systemd(如 Ubuntu 18.04 自带的)不支持,得看man journald.conf确认
真正麻烦的不是设数字,而是搞清你面对的是哪类日志——rsyslog 写的文本日志、journalctl 的二进制日志,还是 Java 应用自己输出的独立日志文件。三者清理逻辑完全不同,混用配置容易漏删或误删。

















