journalctl日志删不掉旧记录是因为journald默认不自动清理,必须显式配置MaxRetentionSec=7d等参数并重启systemd-journald服务,再执行journalctl --vacuum-time=7d清理存量日志,否则旧日志仍保留。
journalctl 日志为什么删不掉旧记录
因为 journald 默认不主动清理日志,即使磁盘快满了也不会自动删——它只按空间配额(SystemMaxUse)或文件数量限制,而非时间。你设了“保留7天”,但若没启用基于时间的清理策略,journalctl --since "7 days ago" 能查到,不代表系统会自动删更老的日志。
修改 /etc/systemd/journald.conf 的关键参数
真正控制日志保存时长的是以下三项,必须显式配置并重启服务才生效:
-
MaxRetentionSec=7d:强制删除早于该时间的日志(优先级最高) -
MaxFileSec=1d:单个日志文件最长存多久(影响轮转粒度,非总保留时长) -
SystemMaxUse=512M(可选):配合时间策略,避免突发日志打爆磁盘
注意:MaxRetentionSec 在较老内核(如 CentOS 7 的 systemd 219)中不支持,需确认版本:systemd --version。低于 230 建议改用 MaxFileSec + SystemMaxUse 组合兜底。
改完配置后必须执行的三步操作
光改配置文件没用,journald 不热加载:
- 运行
sudo systemctl restart systemd-journald - 立即清理已有旧日志:
sudo journalctl --vacuum-time=7d - 验证效果:
journalctl --disk-usage看实际占用,journalctl --list-boots检查最早可查的启动记录是否符合预期
常见错误:跳过 --vacuum-time,导致旧日志仍躺在 /var/log/journal/ 下,新策略只约束后续写入。
Docker Desktop(linux)
当前 Docker 最新稳定版本之一,主要针对稳定性和兼容性进行了修复优化,适合生产环境与日常开发使用。该版本继续强化 AI 开发支持、容器日志管理以及 Docker Engine 的安全能力,对 Windows/macOS/Linux 平台兼容性进行了进一步优化。
日志路径、权限与 SELinux 干扰
journald 默认把日志存在 /run/log/journal/(内存临时目录)和 /var/log/journal/(持久化目录)。只有后者支持 MaxRetentionSec 清理。如果 /var/log/journal/ 不存在,journald 不会自动创建它,得手动触发:
sudo mkdir -p /var/log/journalsudo systemd-tmpfiles --create --prefix /var/log/journal
在 RHEL/CentOS 上还要留意 SELinux:若启用了 enforcing 模式,/var/log/journal/ 目录上下文必须是 system_u:object_r:var_log_t:s0,否则 journald 拒绝写入持久日志——用 ls -Z /var/log/journal 检查,不对就 sudo restorecon -Rv /var/log/journal。