journalctl 查日志:服务起不来时先看这三条命令

举报
yd_265618206 发表于 2026/11/02 16:52:40 2026/11/02
【摘要】 服务突然起不来、接口 502、定时任务没跑——很多新手第一反应是重启服务器,或者到处翻配置文件。其实 systemd 已经把日志都记好了,用 journalctl 几条命令就能定位到报错那一行,比盲目重启省事得多。 先看服务自己的日志sudo journalctl -u nginx -n 100 --no-pager-u 指定服务名,-n 100 只看最近 100 行,--no-pager ...

服务突然起不来、接口 502、定时任务没跑——很多新手第一反应是重启服务器,或者到处翻配置文件。其实 systemd 已经把日志都记好了,用 journalctl 几条命令就能定位到报错那一行,比盲目重启省事得多。

先看服务自己的日志

sudo journalctl -u nginx -n 100 --no-pager

-u 指定服务名,-n 100 只看最近 100 行,--no-pager 让输出直接打出来、不进翻页器,方便复制到别处查。

如果服务刚挂掉,想看它最后一次运行的完整记录,可以加 --since "10 minutes ago",只看最近 10 分钟:

sudo journalctl -u nginx --since "10 minutes ago" --no-pager

时间范围是最实用的过滤器:日志量一大,先把窗口缩到故障发生前后,噪音立刻少一大半。

只看报错级别

日志里 INFO 一大堆,真正有用的是 ERROR 和 WARNING。用 -p 按优先级过滤:

sudo journalctl -u nginx -p err --no-pager

-p err 只显示错误及以上级别。常见的组合是先 -p err 看有没有致命报错,再放宽到 -p warning 看警告——很多“偶尔失败”的毛病,警告里早就写了原因,比如磁盘快满、连接数打满、证书快过期。

跟踪实时日志

服务正在跑、问题正在复现的时候,用 -f 实时跟踪,和 tail -f 一个用法:

sudo journalctl -u myapp -f

一边在另一个窗口触发请求,一边看日志滚动,报错出现的时间点和请求时间点一对上,问题范围就缩得很小了。定位完按 Ctrl+C 退出。

一个排查顺序

服务起不来时,我习惯按这个顺序走:

  1. systemctl status <服务名>:先看它到底是没启动、启动失败,还是启动后又退出了,顺带看最后几行日志摘要。
  2. journalctl -u <服务名> -p err --since "30 minutes ago":看最近半小时的报错。
  3. 根据报错关键字再决定:是端口被占(Address already in use)、配置文件写错(failed to load 一类)、还是权限问题(Permission denied)。

这个顺序的好处是每一步都在缩小范围,而不是一上来就改配置、重启服务——改配置之前先知道错在哪,改完再用 journalctl -f 验证一次,确认报错消失,才算修完。

小提醒

journalctl 默认只看当前启动以来的日志。如果机器重启过、想查上一次启动的记录,可以加 -b -1 看上一次启动的日志。不过对大多数日常排查来说,先掌握 -u、-p、--since、-f 这四个参数,就已经能覆盖八成场景了。

下次服务出问题,先别急着重启:journalctl 问一句,日志自己会把答案说出来。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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