Linux 日志排查入门:用 journalctl 三步定位一次服务起不来的问题

举报
yd_294877891 发表于 2026/10/24 09:12:22 2026/10/24
【摘要】 昨天同事在群里喊:"服务器重启之后,应用起不来了,控制台一片红,怎么办?"其实对 Linux 新手来说,服务起不来并不可怕,可怕的是无从下手。今天就用 systemd 自带的 journalctl,分三个步骤把问题定位出来。第一步:看服务状态,先确认"病在哪里"。大多数现代 Linux 发行版(Ubuntu 16.04+、CentOS 7+,以及华为云常用的 openEuler)都用 sys...

昨天同事在群里喊:"服务器重启之后,应用起不来了,控制台一片红,怎么办?"其实对 Linux 新手来说,服务起不来并不可怕,可怕的是无从下手。今天就用 systemd 自带的 journalctl,分三个步骤把问题定位出来。

第一步:看服务状态,先确认"病在哪里"。

大多数现代 Linux 发行版(Ubuntu 16.04+、CentOS 7+,以及华为云常用的 openEuler)都用 systemd 管理服务。服务起不来,先看它的状态:

sudo systemctl status myapp --no-pager -l

输出里重点看两行:Active 字段(是 failed 还是 inactive),以及末尾几行日志片段。如果看到"failed (Result: exit-code)"之类的提示,说明进程自己退出了。这时候别急着重启,先往下查日志,重启只会把现场冲掉。

第二步:用 journalctl 看完整日志,找到报错行。

systemctl status 只显示最近几行,要看完整的用 journalctl:

sudo journalctl -u myapp --since "1 hour ago" --no-pager

加上 --since 限制时间范围,避免被几天前的日志淹没。再分享两个小技巧:用 -p err 只看错误级别以上的日志;用 grep 按关键字过滤,比如:

sudo journalctl -u myapp -p err --since today --no-pager | grep -i "error\|fail\|denied"

真实案例里,我曾经在日志里看到这样一行:Error: listen EADDRINUSE: address already in use :::3000。端口被占用——原来是旧进程没杀掉,新实例抢不到端口,一眼就定位到了。

第三步:根据报错对症处理,然后验证。

最常见的三类问题和处理办法:

  1. 端口冲突:用 ss -tlnp | grep 3000 找到占用进程,确认无用后 kill 掉,再 systemctl restart myapp。
  2. 配置文件写错:报错通常带行号,比如 line 42: unexpected token。改完后先用应用自带的测试模式(如 nginx -t)验证一遍再重启。
  3. 权限不足:看到 Permission denied 就检查文件属主,必要时 chown 给运行服务的用户,别图省事直接 chmod 777。

处理完别忘了验证:systemctl is-active myapp 返回 active,再看 journalctl -u myapp -n 20 确认没有新的报错。最后加个保险:systemctl enable myapp,让服务开机自启,下次重启机器就不用半夜爬起来了。

总结一下排查口诀:status 看状态、journalctl 看日志、报错行定方向。把这三步练熟,八成的"服务起不来"都能在十分钟内搞定,不用再对着满屏红色干着急。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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