要真正限制 journalctl 日志磁盘占用,需配置 journald.conf 的 systemmaxuse、systemkeepfree、systemmaxfilesize 和 storage=persistent 参数,初始化 /var/log/journal 目录并设正确权限,再通过 journalctl --disk-usage 等命令验证,最后添加定时 vacuum 清理兜底。

要真正限制 journalctl 日志占用的最大磁盘容量,不能只靠临时清理命令,得从配置、目录初始化和定期维护三方面一起做。
配置 /etc/systemd/journald.conf 的核心空间参数
编辑 /etc/systemd/journald.conf,在 [Journal] 小节中启用并设置以下几项(取消注释并填值):
- SystemMaxUse=500M:所有持久化日志总大小上限,推荐 200M–2G,视服务器用途调整
- SystemKeepFree=1G:强制保留至少 1GB 空闲空间,防系统因磁盘满而卡死
- SystemMaxFileSize=100M:单个日志文件最大尺寸,避免 vacuum 效率下降
- Storage=persistent:必须显式设为 persistent,否则日志可能只存内存,重启即丢
改完后务必执行:
sudo systemctl restart systemd-journald
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
确保日志真正落盘到 /var/log/journal
systemd-journald 不会自动创建持久化目录,若缺失或权限错误,服务会退回到 /run/log/journal(内存模式),导致配置失效。
- 创建目录:sudo mkdir -p /var/log/journal
- 设归属组(关键!必须是 systemd-journal):sudo chown root:systemd-journal /var/log/journal
- 设 setgid 权限:sudo chmod 2755 /var/log/journal
- 用 tmpfiles 补全策略(更稳妥):sudo systemd-tmpfiles --create --prefix /var/log/journal
验证是否生效 + 快速确认当前用量
别只看配置文件,直接查实际状态:
- 运行 journalctl --disk-usage,输出应含 “in the file system” 且路径指向 /var/log/journal
- 运行 ls -lh /var/log/journal/*/system.journal,能看到实际生成的 .journal 文件
- 运行 journalctl --list-boots,应列出多个 boot ID,说明跨重启日志已保存
加一层定时清理兜底(防高负载下短暂超限)
即使配置了 SystemMaxUse,突发日志写入仍可能导致瞬时超标。建议用 crontab 每小时主动 vacuum 一次:
- 新建脚本 /root/bin/journal-clean.sh,内容为:
#!/bin/bash
journalctl --vacuum-size=400M > /dev/null 2>&1 - 赋予执行权限:chmod +x /root/bin/journal-clean.sh
- 添加定时任务(sudo crontab -e):
0 * * * * /root/bin/journal-clean.sh










