journalctl 日志清理必须通过 systemd 自带机制实现,核心是配置 maxretentionsec/maxfilesec、执行 vacuum 命令、加 crontab 定时保障三者协同;改配置后需重启 journald,且 vacuum 才真正删除数据。

journalctl 日志不能靠“删文件”来清理,必须用 systemd 自带的机制控制过期与释放——核心是配置 + vacuum + 定时保障三者协同。
正确设置日志过期时间
过期不是自动发生的,得在 /etc/systemd/journald.conf 中明确启用并设值:
- MaxRetentionSec=7d:所有日志最长保留 7 天,超时条目会被 vacuum 清理(注意:不是立即删除,而是下次 vacuum 时生效)
- MaxFileSec=1d:单个日志文件最多存 1 天,加快轮转频率,让过期策略更及时响应
- 两项需配合 SystemMaxUse 使用,否则仅设时间可能因空间充足而延迟清理
改完必须运行 sudo systemctl restart systemd-journald 才能加载新策略。
用 vacuum 命令强制触发过期清理
配置生效后,仍需手动或定时执行 vacuum 来实际删减数据:
- sudo journalctl --vacuum-time=7d:清除所有早于 7 天的日志条目
- sudo journalctl --vacuum-size=300M:保留最新、压缩后的 300MB,自动淘汰最旧部分
- 可同时使用两个参数,journald 按更严格条件执行(比如时间+大小都设了,取交集)
执行后立刻见效,用 journalctl --disk-usage 查看结果。
加 crontab 实现真正自动化
仅靠配置不够可靠,高负载下 journald 可能短暂超限。建议每小时自动 vacuum 一次:
- 新建脚本 /root/bin/journal-clean.sh,内容为:
#!/bin/bash<br>journalctl --vacuum-size=400M > /dev/null 2>&1
- 添加定时任务:
0 * * * * /root/bin/journal-clean.sh - 避免用 find -delete 或 truncate .journal 文件——这些操作会破坏索引,导致 journalctl 报错或服务异常
验证过期策略是否真起作用
别只看配置文件,要确认系统实际加载了:
- 运行 sudo systemd-analyze cat-config systemd/journald.conf | grep -E "(Retention|MaxFileSec)",检查输出是否含你设的值
- 查最近一条日志时间:journalctl -n1 --no-pager,再查最早一条:journalctl --since "2020-01-01" -n1 --no-pager,对比时间差是否接近设定保留期
- 观察 journalctl --disk-usage 输出是否稳定在预期范围内,而非持续增长











