必须创建/var/log/journal目录并设root:systemd-journal归属与2755权限,配置journald.conf中storage=persistent、compress=yes、forwardtosyslog=no,重启服务后用journalctl --disk-usage和--list-boots验证落盘及跨重启可用。

要让 journalctl 日志在重启后不丢失,必须把日志从默认的 /run/log/journal(内存路径,易失)切换到 /var/log/journal(磁盘路径,持久)。这不只是改个配置文件,而是目录、权限、配置、验证四步缺一不可。
创建并设置持久化日志目录
systemd-journald 不会自动创建 /var/log/journal,必须手动初始化,否则服务会静默退回到内存模式:
- 创建目录:
sudo mkdir -p /var/log/journal - 设置归属组为
systemd-journal(关键!否则写入失败):sudo chown root:systemd-journal /var/log/journal - 设 2755 权限(保留 setgid,确保子目录继承组):
sudo chmod 2755 /var/log/journal - 用 systemd-tmpfiles 补全策略(更健壮):
sudo systemd-tmpfiles --create --prefix /var/log/journal
修改 journald.conf 启用持久化
编辑 /etc/systemd/journald.conf,在 [Journal] 小节中明确指定存储行为:
- 将
Storage=设为persistent(不要用auto,避免目录误删后自动降级) - 开启压缩节省空间:
Compress=yes(默认 LZ4,压缩率约 70%) - 关闭冗余转发(除非真有 syslog 集成需求):
ForwardToSyslog=no - 保存后重启服务:
sudo systemctl restart systemd-journald
验证是否真正落盘生效
只看配置文件没用,得确认日志已写入磁盘且跨重启可用:
- 查存储位置和用量:
journalctl --disk-usage—— 输出应含/var/log/journal且显示非零字节数 - 查历史启动记录:
journalctl --list-boots—— 至少看到两个以上 boot ID,说明重启后日志未丢 - 查物理文件是否存在:
ls -lh /var/log/journal/*/system.journal—— 应有实际文件生成
补充:为什么不能只靠 Storage=auto?
auto 模式会先检查 /var/log/journal 是否存在且可写,一旦目录被误删或权限不对,它就自动切回 volatile 模式,日志又变易失。生产环境务必显式设为 persistent,并配合目录初始化,才能真正可靠。











