华为云ECS上用 journalctl 排查 systemd 服务启动失败

举报
yd_252351073 发表于 2026/11/06 17:31:41 2026/11/06
【摘要】 用 journalctl 按服务名、优先级和时间过滤日志,结合路径、端口、权限、环境变量和依赖顺序五类常见原因,排查华为云ECS上 systemd 服务启动失败。

在华为云弹性云服务器上,自己写的服务或常用组件有时会在开机后起不来。systemctl 只提示 failed,真正原因往往在日志里。下面用 journalctl 把启动失败拆开看,不依赖图形界面。

先确认服务状态

在终端执行:

systemctl status 你的服务名

重点看三处:Active 是不是 failed,主进程有没有退出码,以及最下面几行简短报错。如果这里信息不够,再查完整日志。

用 journalctl 看完整记录

查看某个服务从本次启动以来的日志:

journalctl -u 你的服务名 -b --no-pager

只看错误级别:

journalctl -u 你的服务名 -p err -b --no-pager

持续跟踪:

journalctl -u 你的服务名 -f

时间范围也能收窄,例如最近一小时:

journalctl -u 你的服务名 --since “1 hour ago” --no-pager

常见失败原因

第一,单元文件路径或工作目录写错,日志里会出现 No such file or directory。核对 ExecStart、WorkingDirectory 是否真实存在,文件有没有可执行权限。

第二,端口被占用。日志可能提到 address already in use。用 ss -lntp 看是哪个进程占用了同一端口,避免两个服务抢同一个监听地址。

第三,权限不足。以普通用户运行的服务去写只有管理员能写的目录,会看到 Permission denied。把数据目录属主改成服务运行用户,或在单元文件里明确 User 和 Group。

第四,环境变量缺失。依赖配置文件路径、密钥文件或自定义环境变量时,忘记在单元文件的 Environment 或 EnvironmentFile 里声明,进程会立刻退出。把 systemctl show 你的服务名 里的环境相关字段和日志对照即可。

第五,依赖顺序不对。服务需要数据库或网络就绪却过早启动,可能先失败再被自动拉起。可以在单元文件里用 After 和 Requires 声明依赖,再用 systemctl daemon-reload 后重启。

改完如何验证

修改单元文件后必须执行:

systemctl daemon-reload
systemctl restart 你的服务名
systemctl is-active 你的服务名

再用 journalctl -u 你的服务名 -n 50 --no-pager 看最近五十行,确认没有新的报错。如果服务设置了 Restart 策略,失败后会反复拉起,日志会刷得很密,这时先停掉服务再查,避免被滚动日志淹没。

小结

排查启动失败时,先看 systemctl status 的退出码和摘要,再用 journalctl 按服务名、优先级和时间过滤。把路径、端口、权限、环境和依赖五项逐一对照,大多数问题能在云服务器的命令行里定位,不必先重装系统或重建实例。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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