journalctl 本身不直接设置永久保存,真正决定日志是否永久保存的是 systemd-journald 的配置和存储路径;需手动创建 /var/log/journal 目录并设权限,修改 journald.conf 中 storage=persistent,重启服务后验证磁盘路径及跨重启保留,并配置 maxuse、maxfilesize 等限制磁盘占用。

journalctl 本身不直接“设置”永久保存,它只是查看工具。真正决定日志是否永久保存的是 systemd-journald 的配置和存储路径。默认情况下日志只存在内存或 /run/log/journal(重启即丢),要实现永久保存,必须让 journald 把日志写入磁盘上的固定目录,并确保该目录被正确识别和使用。
创建持久化日志目录
systemd-journald 不会自动创建 /var/log/journal,必须手动建立并赋予正确权限,否则即使配置了 persistent,服务仍会退回到易失模式。
- 执行命令创建目录:
sudo mkdir -p /var/log/journal - 设置所属组为
systemd-journal(注意不是 system-journal):sudo chown root:systemd-journal /var/log/journal - 设置权限为
2755(含 setgid 位,确保新生成的子目录自动继承组):sudo chmod 2755 /var/log/journal
修改 journald 配置启用持久存储
仅建目录还不够,需明确告诉 journald 使用持久模式,否则它可能继续用 volatile 方式运行。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 编辑配置文件:
sudo nano /etc/systemd/journald.conf - 找到
Storage=这一行,取消注释并设为:Storage=persistent - 确认
ForwardToSyslog=和ForwardToKMsg=保持为no(避免冗余转发干扰) - 保存后重启服务:
sudo systemctl restart systemd-journald
验证日志是否真正落盘且跨重启保留
配置完不能只看服务状态,要检查实际行为:日志是否已写入 /var/log/journal,且重启后依然可查。
- 运行
journalctl --disk-usage,输出应显示路径为/var/log/journal,而非/run/log/journal - 执行
ls -l /var/log/journal/*/system.journal,应看到非空的二进制日志文件 - 记录一条测试日志:
logger "test after config" - 重启系统后,再运行
journalctl --since "1 hour ago" | grep "test after config",能匹配到即表示成功
限制磁盘占用防止撑满根分区
持久化后日志持续累积,/var/log/journal 可能迅速膨胀,必须设上限。
- 在
/etc/systemd/journald.conf中取消注释并设置:MaxUse=512M(总空间上限) - 添加:
MaxFileSize=64M(单个日志文件大小) - 对临时目录也做限制:
RuntimeMaxUse=128M(作用于/run/log/journal) - 重载生效:
sudo systemctl kill --signal=SIGHUP systemd-journald










