journalctl 的 --vacuum-time 参数不支持自动清理,仅能手动执行;实现自动清理需配置 journald.conf 的 maxretentionsec=15day 并重启服务,或通过 systemd timer 定期触发 vacuum 命令。

journalctl 的 --vacuum-time 参数本身**不支持自动清理**,它只是一次性手动执行的清理命令。要实现“自动清理半个月前日志”,必须结合 systemd-journald 的配置或定时任务来完成。
方法一:通过 journald.conf 配置自动保留策略(推荐)
这是最规范、最可靠的方式。systemd-journald 自带日志轮转与自动清理机制,只需修改其主配置文件:
- 编辑 /etc/systemd/journald.conf
- 取消注释并设置以下两项(单位支持 day/hour/min/sec):
# 仅保留最近15天的日志(含当前日志) MaxRetentionSec=15day <h1>(可选)同时限制磁盘用量,避免单日突增撑爆空间</h1><p>SystemMaxUse=512M</p>
保存后重启日志服务生效:
sudo systemctl restart systemd-journald
此后 journald 每次写入新日志时都会自动检查并清理过期条目,无需额外脚本或定时器。
一个OA雏形,主要是完成项目进程管理的功能。 主要实现: 1。新建项目,设定到期时间,如果超过时间自动转为过期项目。 2。过期项目自动提醒,可自定义设定提醒时间或设定几天一次提醒。 3。自己建立的项目只有自己和超级用户有操作权限。 3。重要的项目可设为重要,有醒目标记,如不想被别人看到的项目可以设为独享,此项目只有自己和管理员可以看到。 4。新项目建立人自动显示为登陆时的用户名,可指定多负责人,如
方法二:用 systemd timer 定期执行 vacuum(备用方案)
若需更灵活控制(比如只在低峰期清理),可创建一个定时任务:
- 新建定时器单元:/etc/systemd/system/vacuum-journal.timer
- 内容如下:
[Unit] Description=Vacuum journal logs older than 15 days <p>[Timer] OnCalendar=weekly Persistent=true</p><p>[Install] WantedBy=timers.target</p>
- 对应的服务单元:/etc/systemd/system/vacuum-journal.service
- 内容如下:
[Unit] Description=Vacuum old journal logs <p>[Service] Type=oneshot ExecStart=/usr/bin/journalctl --vacuum-time=15days</p>
启用并启动:
sudo systemctl daemon-reload<br>sudo systemctl enable --now vacuum-journal.timer
该 timer 每周运行一次,调用 journalctl --vacuum-time=15days 清理。
验证清理是否生效
清理后可通过以下命令确认效果:
- 查看当前日志时间范围:
journalctl --disk-usage和journalctl --since "2 weeks ago" - 检查实际保留时长:
journalctl --list-boots中最早 boot 时间应不早于 15 天前 - 若发现未清理,先确认 journald 是否使用持久日志存储(
/var/log/journal/目录存在且非空)
注意事项
注意几个关键点避免白忙活:
- --vacuum-time 是即时操作,不是配置项 —— 它不会改变默认行为,也不会写入任何配置
- 默认情况下 journald 只在内存中保留日志(
Storage=volatile),此时--vacuum-time无效;必须设为Storage=persistent并确保/var/log/journal/可写 - 手动 vacuum 命令会立即释放磁盘空间,但系统级自动策略更稳定,适合生产环境










