首页/系统/Linux 运维命令速查/journalctl -b 按启动轮次排查

journalctl -b 按启动轮次排查

排查重启类问题先锁定哪次启动:-b 当前、-b -1 上一次,--list-boots 列出全部轮次,再逐轮比对定位引入问题的变更。

Linux 运维命令速查系统更新于 2026-10-13

journalctl -b

每次系统启动,内核与 systemd 都会生成一个唯一的 boot ID,本次启动写下的所有日志都带上这个 ID。journalctl -b 就是按 boot ID 过滤日志:不带参数看当前这次启动,-b -1 看上一次,--list-boots 把所有轮次列出来。排查「重启之后服务起不来」这类问题时,先锁定轮次再逐轮比对,能直接看出问题是哪一次变更引入的。

基本信息

用途按系统启动轮次过滤日志
语法journalctl -b [序号];序号从 --list-boots 的 IDX 列读取
所属systemd(journalctl 与 systemd-journald)
前提历史轮次需要 journal 持久化,否则重启后旧日志即丢失

典型使用场景

  • 重启后排障:服务启动失败,先确认失败发生在哪一次启动,再去那一轮里找原因
  • 变更比对:对比昨晚与今早两轮启动的日志,定位是哪一次发布引入的问题
  • 崩溃取证:机器意外重启后,上一轮的末尾日志是判断是内核 panic 还是断电的关键
  • 启动耗时分析:配合 systemd-analyze 看哪一轮变慢、哪个单元拖了时间
  • 回滚验证:回滚后重启,比对前后两轮的错误条目确认问题消失

常用示例

常用示例
journalctl --list-boots                    # 列出所有启动轮次(0 是当前,负数往前)
journalctl -b -1 -p err                    # 上一次启动里的错误及以上
journalctl -b -1 -n 100 --no-pager         # 上一次启动的最后 100 行
journalctl -b -1 -S '2026-10-12 09:00' -U '2026-10-12 10:00'   # 指定时段
journalctl -b -1 -o short-precise -n 20    # 精确到微秒看关机前最后时刻
journalctl -b -1 -u nginx --no-pager       # 只看某个单元在上一次启动的表现

输出逐列读法

列含义怎么看
IDX轮次序号,0 为当前启动,-1 为上一次命令里就用这个数字写 -b
BOOT ID内核分配的启动标识同一台机器两次启动的 ID 必然不同
FIRST ENTRY该轮最早的日志时间据此判断机器是什么时候起来的
LAST ENTRY该轮最后的日志时间与重启时间比对可算出异常关机时长
只有持久化日志才能跨重启查看历史轮次:/var/log/journal 目录存在时 journald 才写磁盘。容器里的启动轮次由宿主决定,容器内用 -b 往往只能看到容器自己的那一段,排查要回到宿主机视角。
在没启用持久化的机器上执行 -b -1 会直接返回空结果,这不是「上次启动没有错误」,而是根本没有历史数据,别据此下结论。

易错点

  • 把 -b -1 的空输出当成「上次启动干净」,实际是日志未持久化;先看 journalctl --list-boots 有没有历史轮次
  • 轮次序号理解反了:0 是当前启动,-1 才是上一次,脚本里写死 -b -1 时注意重启后会整体偏移
  • 只看单轮日志下结论:重启类问题要看前后两轮的差异,否则很容易把现象当原因
  • 跨重启查日志时不看时间基准:机器断电与正常重启在 LAST ENTRY 上表现不同,先比对启动与关机时间再判断

数据来源与参考

  • man 1 journalctl(-b/--list-boots)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌