journalctl 查日志别只会 tail:三步定位服务报错

举报
yd_227538180 发表于 2026/11/02 10:21:46 2026/11/02
【摘要】 用 journalctl -u 定服务、-xe / --since 看报错上下文、-f 实时跟踪,三步定位服务报错,并附权限、级别过滤等注意事项。

服务起不来,先别急着翻遍整个日志文件。journalctl 是 systemd 的日志工具,它按服务、按时间、按级别过滤,比 tail -f 更适合定位一次报错。下面三步,基本能把问题收敛到一行或几行关键日志。

第一步:只看这一个服务

先把范围收窄到出问题的服务,避免被其他服务的日志淹没:

journalctl -u nginx --no-pager | tail -n 100

说明:-u 后面跟服务名,例如 nginx、sshd、docker;–no-pager 是让日志直接输出、不进分页器,方便复制和搜索。如果服务名不确定,可以先用 systemctl list-units --type=service 查一下。

第二步:看报错前后发生了什么

知道服务名之后,再看它最近一次报错的上下文。两个常用组合:

journalctl -u nginx -xe --no-pager | tail -n 100
journalctl -u nginx --since "2026-11-02 09:00" --until "2026-11-02 10:00" --no-pager

说明:-xe 会补充解释性信息并跳到日志末尾,适合快速看最新报错;–since / --until 按时间切片,适合“某个时间点之后服务就不正常了”的场景。只看报错那一行往往不够,要往上翻十几行,看它在报错前做了什么、依赖是否先失败了。

第三步:实时跟踪,看它是怎么挂的

如果服务是间歇性失败,或者重启后又挂了,用 -f 实时跟踪,比事后翻日志更直接:

journalctl -u nginx -f

在这期间复现一次问题,或者等服务再次异常,屏幕上滚动的就是第一手现场日志。定位到关键报错后,按 Ctrl+C 退出,再回到第二步按时间段截取完整上下文。

注意事项

  1. 权限:普通用户可能看不到完整系统日志,必要时用 sudo journalctl -u 服务名。
  2. 先看级别:加上 -p err 可以只看错误及以上级别,快速过滤噪音,例如 journalctl -u nginx -p err --since today。
  3. 别只看最后一行:很多报错的真正原因是前面一行,例如端口被占用、配置文件语法错误、依赖服务未启动。
  4. 改完配置要重启服务再复现:只改配置不重启,日志里看到的还是旧行为。
  5. 保留现场:定位到关键日志后,把带时间戳的完整段落保存下来,提工单或请同事协助时比一句“服务挂了”有用得多。

总结一下:先用 -u 定服务,再用 -xe / --since 定时间、看上下文,最后用 -f 跟踪复现。三步下来,大多数服务报错都能在几分钟内定位到原因,而不是在日志文件里大海捞针。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。