按单元过滤日志
journalctl -u 单元名 是最常用的排障姿势:它把与某个服务相关的日志全部筛出来,包括 systemd 记录的启动、停止、失败原因,以及服务自己写到标准输出与标准错误的内容。相比在 /var/log 下翻文件,它天然带时间窗过滤与启动轮次,并且能按优先级收敛结果,所以在「服务为什么起不来」这类问题上通常第一屏就能看到关键线索。
基本信息
| 适用平台 | Linux(systemd 发行版) |
|---|---|
| 命令语法 | journalctl -u 单元名 [选项] |
| 常用组合 | -n 行数、-f 跟随、--since/--until 时间窗、-p 优先级、-b 启动轮次、-r 倒序、-o 输出格式、--no-pager 不分页 |
| 单元名写法 | 可省略 .service 后缀;模板单元必须带实例(如 myapp@8001.service) |
| 用户单元 | 用 --user-unit 查询 systemd --user 管理的单元,不需要 root |
典型使用场景
- 服务启动失败:直奔该单元的日志,先看 systemd 报的失败原因再看应用堆栈
- 修改配置后验证:reload 或 restart 后立刻看最近几十行确认无异常
- 按时间窗定位:用 --since 与 --until 圈定故障时段,忽略无关历史
- 多单元联查:同时跟多个相关服务的日志,判断请求在哪一层断掉
- 实时观察:-f 跟随输出,配合一次业务操作观察对应日志
- 定时器排查:查看由 timer 触发的单元日志,确认任务是否真的执行
常用示例
常用示例
journalctl -u sshd -n 50 --no-pager
journalctl -u myapp --since '20 min ago'
journalctl -u myapp -u nginx -f # 多单元合并查看
journalctl -u myapp -p err -b # 本次启动中的错误及以上
journalctl -u myapp --since '2026-10-12 09:00' --until '2026-10-12 10:00'
journalctl -u myapp -o cat -n 100 # 只要消息正文
journalctl --user-unit myapp -n 50 # 用户级单元
journalctl -u myapp -r | head # 倒序,先看最近的
systemctl status myapp --no-pager -l # 与 status 配合看退出码常用组合对照
| 组合 | 用途 | 注意 |
|---|---|---|
| -u 单元 -n N | 看该服务最近 N 条 | 配合 --no-pager 便于复制 |
| -u 单元 -f | 实时跟随 | 运维现场复现问题时最常用 |
| -u 单元 -p err | 只看错误及以上级别 | 会漏掉 warning 级的线索,必要时放宽到 warning |
| -u 单元 -b -1 | 看上一次性启动的日志 | 需 journald 已持久化才查得到 |
| -u A -u B | 多个单元合并输出 | 是或关系,可与其他条件叠加 |
| -o cat | 只输出消息正文 | 便于粘贴到工单或做二次处理 |
多个 -u 之间是或关系,而 -u 与 -p、--since 之间是与关系,可以按「单元 + 级别 + 时间窗」三层叠加收敛结果。排查时建议先放宽条件看清全貌,再逐项加过滤,避免因为条件太窄而误判「没有日志」。
日志归属由进程决定:以 Type=simple 运行的主进程及其子进程的输出归入本单位。老式 fork 型程序与某些守护进程的日志可能落到别的单元甚至 syslog 文件里,此时用 -u 找不到内容,需要改用 _COMM 字段或直接查应用自己的日志目录。反过来,如果一个单元包含多个进程,用 -u 会看到它们的日志混在一起,可再叠加 _PID 或 _COMM 收窄。
单元名拼错不会报错,只会返回空输出,容易被解读成「服务没有日志」。查不到内容时先用 systemctl list-units --type=service | grep 关键字 确认真实的单元名,并检查 journald 是否持久化(存在 /var/log/journal 目录)。
与 status 的分工:status 给出退出码、重启次数与最近几行摘要,journalctl -u 给出完整时间线。定位启动失败时两者配合效率最高——先用 status 拿到退出码与 Result,再用 journalctl -u 单元名 -b 看本次启动的完整日志,最后用 systemctl show -p ExecMainStatus 取精确值写入工单。
要同时看几个单元的日志就重复写单元参数,多个单元之间是并列关系;排除某个单元没有取反写法,通常改用过滤输出来实现。跟随模式可以与单元参数组合,服务重启前后的日志会连在一起出现,比先停服务再翻历史记录更接近真实时序。