当前位置:首页 > 文章列表 > 文章 > linux > Linux 怎样按启动轮次筛选 systemd 日志

Linux 怎样按启动轮次筛选 systemd 日志

来源:17golang原创 2026-10-18 02:16:50 0浏览 收藏

排查 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 表示再上一轮。这里的编号是相对编号,不是永久不变的主键;日志被轮换、清理或查询了另一台机器的目录后,可见范围会变化。

journalctl 启动轮次、BOOT_ID 与日志文件之间的静态关系图
图1:启动轮次识别与 systemd 日志存储的静态说明图,不是终端截图或运行证据。

用 -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 用启动轮次和 since until 时间范围共同筛选日志的静态关系图
图2:启动轮次与时间范围共同限定日志记录的静态说明图,不是执行流程截图。

把过滤条件组合成可复用命令

实际排障时,可以按“轮次、服务、级别、时间”这个顺序组织命令。这样读者接手命令时,先能看出日志属于哪一次启动,再知道为什么结果只剩一个时间窗口。

# 上一轮启动中筛选指定服务和错误级别,并限定故障窗口
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 表示查看到终点;排查跨重启问题时,建议显式同时写出轮次和时间边界。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Linux socket 激活怎样把监听职责交给 systemdLinux socket 激活怎样把监听职责交给 systemd
上一篇
Linux socket 激活怎样把监听职责交给 systemd
Linux 服务怎样安全加载环境文件
下一篇
Linux 服务怎样安全加载环境文件
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    511次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    571次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    597次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    549次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    365次使用