首页/系统/Linux 运维命令速查/systemctl 单元日志快速定位
systemd 与服务42 条

systemctl 单元日志快速定位

status 片段不够用时:journalctl -u 与 status 组合定位服务问题;本条目给出一套「看日志找原因」的标准动作。

Linux 运维命令速查系统更新于 2026-10-13

单元日志怎么找

systemctl status 默认只显示最后几行日志,定位问题时明显不够。标准动作是组合使用:status 看单元状态与最近的日志片段,journalctl -u 取该单元的完整日志,再按时间窗口与关键字过滤。要留意两类差异:服务若自己写文件日志,systemd 侧只有启停记录,应用错误得去文件里找;日志级别是 info 的错误用 -p err 过滤会漏,过滤前先确认日志的真实级别。

基本信息

适用平台Linux(systemd 与 journald)
命令组合systemctl status 单元 + journalctl -u 单元
常用选项-n 行数 --since 与 --until 时间窗口 -p 优先级 -b 启动轮次 -f 实时跟踪 --no-pager 不分页
日志来源systemd 采集进程输出;应用自行写文件日志时不会进入 journal
权限说明读取系统 journal 需要 root 或加入 systemd-journal 等对应组

典型使用场景

  • 服务启动失败,定位是配置错误还是依赖未就绪
  • 运行中偶发报错,回溯发生前后的上下文
  • 对比上一次启动与本次启动的日志差异
  • 实时跟踪服务输出,配合复现操作定位问题
  • 确认应用日志究竟输出到 journal 还是文件

标准动作

标准动作
systemctl status myapp --no-pager -l
journalctl -u myapp -n 200 --no-pager
journalctl -u myapp --since '15 min ago' | grep -iE 'error|fail|exception' | tail -n 30
journalctl -u myapp -b -1 -p err          # 上一次启动的错误级别日志
journalctl -u myapp -f                    # 实时跟踪
systemctl cat myapp | grep -E 'ExecStart|StandardOutput|StandardError'

常用查询组合

需求命令说明
看当前状态systemctl status 单元含活动状态、退出码与最近的日志片段
看更多日志journalctl -u 单元 -n 200默认输出行数很少,需显式指定行数
按时间对齐journalctl -u 单元 --since与变更时间点对齐,快速锁定引入问题的操作
按启动轮次journalctl -u 单元 -b -1查看上一次开机以来的日志
实时观察journalctl -u 单元 -f复现故障时同步查看输出
只看 status 的最后几行往往不够,崩溃点常常更早。建议从 -n 200 起步,再按时间窗口与关键字逐步收敛。
服务若自行写文件日志,journal 中只有启停记录。先用 systemctl cat 查看 ExecStart 与输出重定向配置,确定应用日志的实际路径。
journal 默认可能只保存在内存(/run/log/journal),重启后本轮日志全部丢失。需要跨重启保留,要在 journald.conf 里开启持久化存储并确认磁盘容量足够。
日志量大的服务可用 journalctl --since 与 --until 精确圈定窗口,再配合 -o short-precise 或 -o json 输出,便于与变更时间或脚本解析对齐。

易错点

  • 只用 status 查看少量日志,遗漏更早的关键错误
  • 日志级别为 info 的错误却用 -p err 过滤,输出为空导致误判
  • 应用自写文件日志时在 journal 里反复查找,浪费时间
  • 脚本中不加 --no-pager,输出被分页程序接管导致挂住

数据来源与参考

  • man 1 journalctl
  • man 1 systemctl

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌