要真正限制 journalctl 日志的最大占用空间和过期时间,需从配置、清理、监控三方面设防:修改 /etc/systemd/journald.conf 设置 systemmaxuse、systemmaxfilesize、maxretentionsec 等参数,重启服务生效;配合 journalctl --vacuum-size 和 --vacuum-time 手动清理;再通过 crontab 每小时自动执行 vacuum 防超限。

要真正限制 journalctl 日志的最大占用空间和过期时间,不能只靠单次命令,得从配置、清理、监控三方面一起设防。核心是修改 journald.conf 实现永久策略,再辅以定期 vacuum 和状态检查。
设置最大磁盘占用(空间上限)
编辑 /etc/systemd/journald.conf,在 [Journal] 段落中启用并配置:
-
SystemMaxUse=500M:限定
/var/log/journal/下所有日志总大小,推荐值 200M–1G,视服务器用途而定 - SystemMaxFileSize=100M:控制单个日志文件大小,避免单个文件过大拖慢 vacuum 效率
- SystemKeepFree=500M(可选):强制保留至少 500MB 空闲空间,防止日志写满系统分区
改完后执行 sudo systemctl restart systemd-journald 生效。
设定日志保留时长(过期策略)
同样在 journald.conf 中配置:
- MaxRetentionSec=4week:日志最长保留 4 周,超时自动轮转淘汰(注意不是“精确删除”,而是配合 vacuum 触发)
- MaxFileSec=1week:单个日志文件最多存 7 天,加速轮转频率,让 vacuum 更易生效
这两项需与 SystemMaxUse 配合使用——时间策略防长期堆积,空间策略防突发写入撑爆磁盘。
用 journalctl --vacuum-size 和 --vacuum-time 主动清理
配置生效前或空间告急时,可手动触发清理:
-
sudo journalctl --vacuum-size=400M:立即删减日志,只保留最新、压缩后的 400MB -
sudo journalctl --vacuum-time=14d:清除早于 14 天的所有日志条目 - 两者可叠加:
sudo journalctl --vacuum-size=300M --vacuum-time=10d,取更严格者生效
执行后务必运行 journalctl --disk-usage 确认结果。
加一层定时保障(防配置失效)
即使配置了 SystemMaxUse,journald 在高负载下仍可能短暂超限。建议用 crontab 每小时自动清理一次:
- 新建脚本
/root/bin/journal-clean.sh,内容为:
#!/bin/bash
journalctl --vacuum-size=400M > /dev/null 2>&1 - 添加定时任务:
0 * * * * /root/bin/journal-clean.sh - 确保脚本有执行权限:
chmod +x /root/bin/journal-clean.sh











