关键在两步:一是创建/var/log/journal目录并设为root:systemd-journal归属和2755权限,二是配置journald.conf中Storage=persistent、SystemMaxUse=2G、MaxRetentionSec=2week等参数,重启服务后通过journalctl --disk-usage和--list-boots验证落盘与跨重启可用。
要让 journalctl 日志重启不丢、长期可用,又不把磁盘撑爆,关键在两步:一是启用持久化存储路径,二是设好容量和时间上限。光改配置文件不够,目录权限和生效验证缺一不可。
systemd-journald 不会自动创建 /var/log/journal,必须手动建立并赋予正确权限,否则服务会静默退回到内存模式(/run/log/journal),导致重启后日志消失。
sudo mkdir -p /var/log/journal
systemd-journal):sudo chown root:systemd-journal /var/log/journal
sudo chmod 2755 /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
编辑 /etc/systemd/journald.conf,在 [Journal] 小节中明确启用持久化并开启压缩:
Storage=persistent(不要依赖 auto,避免目录误删后降级)Compress=yes(默认用 LZ4,节省约 70% 空间)ForwardToSyslog=no(除非你真需要转发到 rsyslog,否则关掉减少冗余)保存后重启服务:sudo systemctl restart systemd-journald
持久化后日志会持续增长,必须限制总量、单文件大小和保留时长。推荐组合使用以下参数(全部加在 [Journal] 下):
SystemMaxUse=2G:所有持久化日志总大小上限(建议 1–4G)SystemKeepFree=3G:强制保留至少 3G 空闲空间,防系统卡死MaxRetentionSec=2week:日志最长保留 2 周(支持 1d、30d、6months 等)MaxFileSec=1d:单个日志文件最多存 1 天(利于轮转和清理)SystemMaxFileSize=100M:单个文件最大 100MB,防单文件过大难处理改完配置同样需执行 sudo systemctl restart systemd-journald 生效。
别只看配置文件,要确认日志已落盘且跨重启可用:
journalctl --disk-usage —— 输出应显示 “in the file system”,且路径含 /var/log/journal
journalctl --list-boots —— 应列出多个 boot ID,说明历史周期日志已保存ls -lh /var/log/journal/*/system.journal —— 应看到非空的二进制 .journal 文件logger "test-persist-$(date)"; sudo reboot,重启后运行 journalctl -n 5 确认该条存在