journalctl --vacuum-time 仅按固定时间戳硬删日志,不支持自适应;所谓“自适应”需依赖 systemd timer、脚本或 journald.conf 配置组合实现策略调度与空间控制。

journalctl 的 --vacuum-time 本身不支持“自适应”或动态周期判断,它只接受固定时长(如 7d、30d),按日志时间戳硬性删除早于该时限的全部条目。所谓“自适应时间周期”的物理擦除,实际是通过外部机制(如 systemd timer 或脚本)定期执行带不同参数的 vacuum 命令来实现策略切换,而非 --vacuum-time 自身具备该能力。
明确 --vacuum-time 的行为边界
该参数纯粹按时间戳裁剪,不感知磁盘压力、日志增长速率或业务波动:
- 执行
journalctl --vacuum-time=14d,会立即删除所有时间戳早于“当前时间减14天”的日志条目; - 它不检查是否刚好满14天、也不跳过周末/节假日,更不会因某天日志量暴增而自动延长保留期;
- 清理对象仅限持久化日志(
/var/log/journal/下),内存中日志(/run/log/journal/)重启即失,无需 vacuum。
用 systemd timer 实现“准自适应”调度
虽不能真正自适应,但可通过定时器+预设策略组合,模拟按需调整的效果:
- 定义多个独立 timer/service 对:例如
journal-vacuum-7d.timer(每周一运行)、journal-vacuum-30d.timer(每月1号运行); - 在服务单元中用
ExecStartPre=加条件判断,比如检测磁盘使用率超过85%时,临时改用更激进的--vacuum-time=3d; - 启用
Persistent=true,确保系统宕机后补执行,避免策略断档。
结合 journald.conf 配置形成双层控制
底层配置可设定默认兜底策略,让 --vacuum-time 操作更可控:
- 在
/etc/systemd/journald.conf中设置MaxRetentionSec=30d,限制日志最长存留时间; - 配合
SystemKeepFree=5G,当空闲空间不足时,journald 会主动触发内部轮转,与手动 vacuum 形成互补; - 开启
Compress=yes减少物理占用,间接延长同等空间下的有效保留时长。
用脚本封装实现简单策略切换
若需根据日期、负载或运维窗口动态选参,可用轻量脚本驱动:
- 脚本读取当前星期几,周一到周四用
--vacuum-time=10d,周五用--vacuum-time=3d(为周末留缓冲); - 脚本调用
df /var,若使用率 >90%,则执行--vacuum-time=1d并发告警; - 将脚本注册为 systemd service,再由 timer 触发,比纯 cron 更符合 systemd 生态。











