Linux 怎样按启动轮次筛选 systemd 日志
排查 Linux 重启前后的问题时,先不要在整本 journal 里翻滚动输出。更稳的做法是先用 journalctl --list-boots 看清每一轮启动的相对编号、BOOT_ID 和时间范围,再用 -b 选中目标轮次,最后叠加 --since 与 --until 限定故障窗口。
官方地址:https://www.freedesktop.org/software/systemd/man/latest/journalctl.html
最常用的组合是journalctl --list-boots负责确认轮次,journalctl -b -1负责读取上一轮启动;如果还知道故障发生时间,就在同一个命令上加--since和--until。相对编号只对当前可见的启动记录有意义,长期保存上一轮日志还取决于 journald 的持久化配置。
先把启动轮次列出来
--list-boots 会以表格列出启动编号、启动 ID,以及该轮第一条和最后一条消息的时间。它的价值不是直接给出故障原因,而是先回答“上一轮到底是哪一轮、日志覆盖到什么时候”。
# 先列出当前 journal 中可见的启动轮次和时间范围 journalctl --list-boots # 只查看最近几条轮次,便于快速确认当前启动附近的记录 journalctl --list-boots -n 5
输出中的 0 通常表示当前启动,-1 表示紧邻当前启动的上一轮,-2 表示再上一轮。这里的编号是相对编号,不是永久不变的主键;日志被轮换、清理或查询了另一台机器的目录后,可见范围会变化。

用 -b 选择当前、上一轮或指定 ID
确认轮次后,使用 -b 读取对应启动的消息。空参数或 -b 0 面向当前启动,-b -1 面向上一轮;也可以把 --list-boots 中的 32 位 BOOT_ID 直接交给 --boot=,减少相对编号在记录变化后的歧义。
# 读取当前启动的全部可见日志 journalctl -b 0 # 读取上一轮启动;负数从当前可见记录向前数 journalctl -b -1 # 使用明确的 BOOT_ID,避免只凭相对编号猜测目标轮次 journalctl --boot=替换为32位BOOT_ID
如果只想看内核消息,可以在轮次选择后加 -k;如果只关心某个服务,可以再加 -u 服务名.service。这些条件是在同一份 journal 上继续缩小结果,不会改变 -b 对启动轮次的选择。
给目标轮次加上时间边界
--since 是起始时间,--until 是结束时间。二者可以写成可读的时间表达式,例如 today、yesterday、2026-10-18 01:20:00;为了复盘固定故障,使用完整日期和时分秒更容易把排查结果交给其他人复现。
# 在上一轮启动中,只看一个明确的故障时间窗口 journalctl -b -1 --since "2026-10-17 23:10:00" --until "2026-10-17 23:30:00" # 在指定轮次中只看某个服务,先按轮次再按时间和服务缩小范围 journalctl -b -1 -u nginx.service --since "10 minutes ago" --until "now"
时间边界只负责限制消息时间,不会替你选择启动轮次。比如当前启动已经跨过午夜,直接使用 --since today 可能把结果限制在今天,而你真正要找的故障发生在上一轮的昨天;这时应先写清 -b -1,再决定时间表达式属于哪一天。

把过滤条件组合成可复用命令
实际排障时,可以按“轮次、服务、级别、时间”这个顺序组织命令。这样读者接手命令时,先能看出日志属于哪一次启动,再知道为什么结果只剩一个时间窗口。
# 上一轮启动中筛选指定服务和错误级别,并限定故障窗口 journalctl -b -1 -u nginx.service -p err \ --since "2026-10-17 23:10:00" \ --until "2026-10-17 23:30:00" # 仅筛选上一轮的内核消息,适合查看启动阶段的驱动或磁盘线索 journalctl -k -b -1 --since "2026-10-17 23:00:00" --until "2026-10-17 23:20:00"
如果权限不足,先确认当前用户是否能读取系统 journal;在发行版默认限制较严时,可以在明确需要的情况下使用 sudo。不要为了“看全”而长期把命令写成无边界的全量输出,先缩小轮次和时间通常更快。
遇到空结果时检查这几个边界
- 上一轮不存在:
--list-boots只显示当前 journal 中保留下来的记录,-b -1没有匹配项时不能凭空恢复旧日志。 - 日志没有跨重启保存:如果系统只把 journal 放在易失位置,重启后上一轮可能已经不可见;这不是
-b语法问题。 - 时间窗口写错日期:相对时间表达式依赖执行时刻,复盘和交接时优先使用带日期的完整时间。
- 编号理解反了:负数从当前启动向前查,正数表示从日志中最早可见的启动方向计数;需要确认时,重新查看
--list-boots。 - 服务名写错:先用正确的 unit 名称,再叠加
-u;否则会把“服务过滤无结果”误认为“该轮没有日志”。
速查表
| 目标 | 命令 | 说明 |
|---|---|---|
| 列出启动轮次 | journalctl --list-boots | 查看相对编号、BOOT_ID 和时间范围 |
| 当前启动 | journalctl -b 0 | 选择当前可见的启动轮次 |
| 上一轮启动 | journalctl -b -1 | 从当前启动向前选择一轮 |
| 固定时间范围 | --since ... --until ... | 在选中的轮次中缩小消息时间 |
记住一个简单顺序:先用 --list-boots 认轮次,再用 -b 选轮次,最后用 --since/--until 限定时间。如果结果为空,优先回到轮次表和日志保留策略检查,而不是反复改写同一个过滤参数。
相关问题
journalctl -b -1 为什么看不到上一轮?
先运行 journalctl --list-boots。如果列表里没有负数对应的轮次,通常是旧日志没有保留、journal 被清理,或者当前查询目录不是目标主机的日志目录。
BOOT_ID 比 -1 更可靠吗?
BOOT_ID 能明确指向一轮启动,适合交接和脚本记录;-1 更适合临时查看最近一次重启。两者都受当前可见 journal 数据范围影响。
--since 和 --until 能单独使用吗?
可以。单独使用 --since 表示从起点开始,单独使用 --until 表示查看到终点;排查跨重启问题时,建议显式同时写出轮次和时间边界。
Linux socket 激活怎样把监听职责交给 systemd
- 上一篇
- Linux socket 激活怎样把监听职责交给 systemd
- 下一篇
- Linux 服务怎样安全加载环境文件
-
- 文章 · linux | 1小时前 |
- Linux 怎样读取 cgroup v2 内存压力事件
- 144浏览 收藏
-
- 文章 · linux | 1小时前 | Linux · 安全 · Linux systemd capability CapabilityBoundingSet
- Linux 服务怎样按 capability 缩小权限
- 121浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux pidfd 怎样减少 PID 重用误杀风险
- 272浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux 怎样用 lsblk JSON 输出设备层级
- 467浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux 怎样为单个进程查看资源限制
- 228浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux ARP 邻居状态异常怎样读取和刷新
- 442浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux 怎样用 ss 区分监听与已连接套接字
- 279浏览 收藏
-
- 文章 · linux | 1小时前 | Linux · systemd EnvironmentFile Linux服务环境变量
- Linux 服务怎样安全加载环境文件
- 434浏览 收藏
-
- 文章 · linux | 1小时前 | 服务管理 · Linux systemd systemd.socket ListenStream Accept socket activation systemd.service
- Linux socket 激活怎样把监听职责交给 systemd
- 376浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux 怎样用 systemd-analyze 找启动瓶颈
- 123浏览 收藏
-
- 文章 · linux | 19小时前 |
- Linux /proc 读取进程内存指标的方法
- 194浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 511次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 571次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 597次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 549次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 365次使用
-
- 详解golang执行Linuxshell命令完整场景下的使用方法
- 2023-01-07 426浏览
-
- go程序部署到linux上运行的实现方法
- 2023-01-02 387浏览
-
- Linux系统下Go语言开发环境搭建
- 2023-01-07 242浏览
-
- 使用golang获取linux上文件的访问/创建/修改时间
- 2022-12-31 238浏览
-
- 在Linux系统中安装Go语言的详细教程
- 2022-12-29 402浏览
