journalctl 不支持直接按退出码筛选,需结合 _SYSTEMD_UNIT 与 grep 匹配 MESSAGE 中的 status=数字、code=exited 等模式,并用 systemctl status 验证失败时间点后定位上下文日志。

journalctl 本身不直接支持按服务退出状态码(如 ExitCode=1、Status=255)筛选日志,因为状态码不是独立字段,而是嵌在 MESSAGE 或 systemd 启动/停止记录的描述文本中。但你可以通过组合关键字段和文本匹配,高效定位含特定退出码的日志。
先确认服务最近一次退出是否记录了状态码
systemd 在服务停止或失败时,会在日志中写入类似这样的条目:
- UNIT=nginx.service
- MESSAGE=nginx.service: Main process exited, code=exited, status=1/FAILURE
- MESSAGE=nginx.service: Failed with result 'exit-code'
这些信息出现在 systemd 自身的单元管理日志里,不一定在服务进程自己的输出中。所以不能只查 -u nginx.service,而要查 systemd 对该单元的操作记录。
用 _SYSTEMD_UNIT + MESSAGE 精准匹配退出码
推荐命令结构:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
journalctl _SYSTEMD_UNIT=nginx.service --since "24 hours ago" | grep -i "status=[0-9]+\|code=exited|result.*exit"- 加
--no-pager避免分页干扰管道处理 - 用
-o short-iso统一时间格式,方便比对时间线
示例:查过去 3 小时内 nginx.service 所有含数字状态码的日志行:
journalctl _SYSTEMD_UNIT=nginx.service --since "3 hours ago" --no-pager -o short-iso | grep -E "status=[0-9]+|exit-code|failed with result"
结合 systemctl status 快速验证退出码
运行 systemctl status nginx.service,输出顶部通常会显示:
- Active: failed (Failed) since Tue 2026-09-15 22:17:03 CST; 11h ago
- Main PID: 12345 (code=exited, status=1/FAILURE)
这个 status=1/FAILURE 就是你要找的退出码线索。它对应 journal 中最近一条 systemd 的 UNIT 记录,可据此反向用 journalctl _SYSTEMD_UNIT=... --since "2026-09-15 22:17:00" 定位原始日志。
查完整退出上下文(含启动参数与失败堆栈)
单靠 grep 容易漏掉前置原因。更可靠的做法是拉取“失败前后各 50 行”:
- 先获取失败时间点(来自
systemctl status输出中的 “since” 时间) - 再执行:
journalctl _SYSTEMD_UNIT=nginx.service --since "2026-09-15 22:17:00" -n 100 --no-pager - 重点看 _PID、MESSAGE、PRIORITY 字段,配合
-o json-pretty查结构化字段

















