journalctl -b -1 查不到日志是因为journald默认仅将日志存于内存(/run/log/journal/),重启即清空;需创建/var/log/journal并设置storage=persistent才能持久保存跨重启日志。

必须先确认日志持久化已启用,否则 journalctl -b -1 会报错或返回空。
为什么 journalctl -b -1 常常查不到日志
默认情况下,systemd-journald 只把日志存在内存里(/run/log/journal/),重启后就清空。所以“上一次开机”的日志根本没保存下来。
- 检查是否启用持久化:
ls /var/log/journal/—— 若目录不存在或为空,说明未启用 - 启用方式:运行
sudo mkdir -p /var/log/journal,再执行sudo systemctl restart systemd-journald - 验证配置:
grep "^Storage=" /etc/systemd/journald.conf应输出Storage=persistent
确认能查到上一次启动的 boot ID
用 journalctl --list-boots 看历史启动记录。正常输出类似:
-2 8a1f Wed 2026-09-27 08:12:03 CST — Wed 2026-09-27 08:15:41 CST -1 9b2e Wed 2026-09-27 08:15:55 CST — Tue 2026-09-29 03:40:22 CST 0 c3d4 Tue 2026-09-29 03:40:30 CST — now
注意:编号是负数递减,“-1”才是上一次完整启动(即本次开机前那次),不是“-0”或“0”。
-
-b -1查的是上一次启动的全部日志(从Starting kernel到关机前最后一行) - 如果刚重启完想看崩溃原因,重点看
journalctl -b -1 --no-pager | tail -n 30的末尾几条 - 加
--no-pager避免卡在less里,尤其配合tail或grep时
快速定位上一次开机失败线索
单纯翻日志效率低,直接过滤典型失败信号:
- 内核级崩溃:
journalctl -b -1 | grep -i "panic\|oops\|watchdog\|die\|unable to handle" - 服务启动失败:
journalctl -b -1 --failed—— 列出所有失败的 unit - 只看错误及以上级别:
journalctl -b -1 -p 3(3对应err) - 查某个关键服务是否启动成功:
journalctl -b -1 -u sshd.service | grep "Started\|Failed"
容易忽略的细节
时间、单位名、权限这三点最常导致查不到东西:
-
-u后必须带.service后缀,写成nginx或nginx.service(不带点)都会报No journal files were found -
--since "1 hour ago"这类相对时间只对当前 boot 有效;查-b -1时建议用绝对时间,比如--since "2026-09-27 08:15:00" - 非 root 用户可能看不到其他用户或系统服务的日志,临时加
sudo最稳妥











