Linux journalctl 如何只看某 systemd 服务本次启动日志
来源:17golang原创
时间:2026-09-10 13:47:37 268浏览 收藏
如果只想查看某个 systemd 服务在当前这次系统启动里的日志,直接把服务过滤和启动过滤放在同一条命令中:
# -u 限定服务,-b 限定当前系统启动,--no-pager 便于复制完整输出
journalctl -u demo.service -b --no-pager
把 demo.service 换成实际 unit 名即可。这里的 -u 对应服务边界,-b 对应系统启动边界,两者是交集关系,不是“先看服务、再凭肉眼挑时间”。
官方资料入口:https://www.freedesktop.org/software/systemd/
- 最小写法是
journalctl -u 服务名 -b --no-pager。 - 空结果优先检查 unit 全名、读取权限和是否为用户服务。
- 本次系统启动不等于服务最近一次启动;需要历史批次时先看
--list-boots。
先确认 unit 名,再组合 -u 与 -b
服务页面上显示的进程名、软件名和 systemd unit 名可能不同。先用状态命令确认精确名称:
# 显示 unit 的实际状态;不要把进程名直接替换成服务名
systemctl status demo.service --no-pager
# 只查看当前系统启动中该服务的日志
journalctl -u demo.service -b --no-pager -o short-iso
-u 是 --unit= 的短选项,会匹配服务相关的 systemd 日志字段;-b 不带参数时表示当前 boot。两个条件同时存在时,journalctl 只保留同时满足服务和启动批次的记录。-o short-iso 让时间格式更适合跨机器比较,若只想看最近 80 行,可以加 -n 80。

本次启动不等于最近一次服务启动
一台机器可能经历多次 boot,同一个服务也可能在一次 boot 中被手动重启多次。因此“当前 boot 的服务日志”仍可能包含本次系统启动后的多次服务实例。先查看系统启动列表:
# 列出日志库能够识别的系统启动批次,0 通常代表当前批次
journalctl --list-boots --no-pager
# 只查看目标服务在当前 boot 的最近 30 行
journalctl -u demo.service -b -n 30 --no-pager
如果要看上一次系统启动,可使用 -b -1;这改变的是系统 boot 边界,不是服务名。较新的 systemd 还提供 --list-invocations,可用于观察 unit 的服务实例边界:
# 查看该 unit 的 invocation 记录;先确认本机 systemd 支持此选项
journalctl -u demo.service --list-invocations --no-pager
# 将当前 boot 内的日志再收窄到一个时间窗口
journalctl -u demo.service -b --since "10 minutes ago" --until now --no-pager
排障时先决定要回答哪个问题:机器重启后的服务表现,用 -b;某次服务重启后的表现,用 invocation 或明确的 --since/--until。不要用“最新几行”代替边界选择。

空结果时按四层检查
| 现象 | 优先检查 | 处理方式 |
|---|---|---|
| 提示找不到 unit 或没有记录 | unit 名 | 用 systemctl list-units --type=service 或 systemctl status 确认完整名称。 |
| 普通用户看不到系统服务日志 | 读取权限 | 先用 sudo journalctl -u demo.service -b 对比;长期使用可加入系统日志读取组。 |
| 服务是用户级 unit | 日志范围 | 使用 journalctl --user -u app.service -b,不要和系统级 unit 混查。 |
| 重启后历史日志消失 | journald 保存策略 | 检查日志是否持久化;当前日志库没有保存的记录,筛选参数无法补回。 |
还有一个容易忽视的边界:journalctl 读取的是调用者有权访问的 journal。命令为空不一定代表服务没有输出,也可能只是普通用户看不到系统级日志。先确认权限,再判断服务是否真的没有写日志。
实用命令速查与复查动作
- 实时跟踪当前 boot 的服务:
journalctl -u demo.service -b -f。 - 只看错误级别及以上:
journalctl -u demo.service -b -p err。 - 导出便于复制的纯文本:加上
--no-pager -o short-iso,避免分页器截断上下文。 - 对比上一轮启动:先执行
journalctl --list-boots,再把-b -1换入同一条服务过滤命令。
最后复查时,至少确认三件事:unit 名确实对应目标服务;-b 是否表达了你要的系统启动批次;命令执行用户是否有权读取该批次的 journal。这样得到的日志范围才足以支撑后续的重启、配置或依赖排查。
常见问题
为什么 journalctl -u demo 有时也能看到日志?
systemd 可能把不带后缀的名称解析为 unit,但排障记录建议使用完整的 demo.service,可读性和复查一致性更好。
-b 和 -b -1 有什么区别?
-b 选择当前系统启动,-b -1 选择前一个启动批次。它们都可以和 -u 同时使用。
为什么服务刚启动却查不到日志?
先确认 unit 名和权限,再检查服务是否把日志写入其他文件、是否使用了用户级 unit,以及 journald 是否正在接收该进程的输出。
-
432 收藏
-
485 收藏
-
105 收藏
-
360 收藏
-
229 收藏
-
185 收藏
-
160 收藏
-
119 收藏
-
142 收藏
-
文章 · linux | 18小时前 | Linux · systemd · 运维排查 · ulimit · 文件描述符 · Linux systemd LimitNOFILE ulimit -n 打开文件数134 收藏
-
273 收藏
-
文章 · linux | 23小时前 | Linux · 网络诊断 · iproute2 · 路由排查 · 多网卡 · Linux 路由表 ip route get 策略路由 出口网卡 ip rule436 收藏
-
242 收藏
-
412 收藏
-
文章 · linux | 1天前 | Linux · 内存限制 · cgroup-v2 · 资源隔离 · Linux cgroup memory.current memory.max cgroup-v2280 收藏
-
481 收藏
-
283 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习