journalctl 查日志别只会 tail:三步定位服务报错
【摘要】 用 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 退出,再回到第二步按时间段截取完整上下文。
注意事项
- 权限:普通用户可能看不到完整系统日志,必要时用 sudo journalctl -u 服务名。
- 先看级别:加上 -p err 可以只看错误及以上级别,快速过滤噪音,例如 journalctl -u nginx -p err --since today。
- 别只看最后一行:很多报错的真正原因是前面一行,例如端口被占用、配置文件语法错误、依赖服务未启动。
- 改完配置要重启服务再复现:只改配置不重启,日志里看到的还是旧行为。
- 保留现场:定位到关键日志后,把带时间戳的完整段落保存下来,提工单或请同事协助时比一句“服务挂了”有用得多。
总结一下:先用 -u 定服务,再用 -xe / --since 定时间、看上下文,最后用 -f 跟踪复现。三步下来,大多数服务报错都能在几分钟内定位到原因,而不是在日志文件里大海捞针。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)