systemd 服务启动失败,先看这三处再重启

举报
1swei 发表于 2026/11/08 09:27:35 2026/11/08
【摘要】 服务起不来,第一反应往往是 systemctl restart xxx 再试一次。但重启之前先看三处,多数情况下一次就能定位问题,盲目重启只会把日志冲掉、把现场弄丢。第一处:systemctl status 的最后几行。不要只看 Active: failed 这一行,往下拉看日志尾巴和 Process: 行的退出码。退出码 203 是 ExecStart 里的命令找不到或没执行权限,203 ...

服务起不来,第一反应往往是 systemctl restart xxx 再试一次。但重启之前先看三处,多数情况下一次就能定位问题,盲目重启只会把日志冲掉、把现场弄丢。

第一处:systemctl status 的最后几行。不要只看 Active: failed 这一行,往下拉看日志尾巴和 Process: 行的退出码。退出码 203 是 ExecStart 里的命令找不到或没执行权限,203 先查路径和权限;退出码 1 通常是程序自己退出的,要去看程序日志;Result: exit-code 后面如果跟着 code=exited,说明进程确实跑起来过又退了,问题在程序配置而非 systemd 本身。

第二处:journalctl -u xxx --since "10 minutes ago"。systemctl status 只给最后十几行,完整的启动报错都在 journal 里。常见三类:端口被占(Address already in use)——先 ss -ltnp 找到占端口的进程,而不是改端口绕过去;配置文件语法错——很多服务启动前不校验配置,报错直接写在 journal 里,按行号改;依赖的目录或文件不存在——比如日志目录没建,服务一写日志就退出,mkdir -p 加上对应属主就能解决。

第三处:unit 文件本身。systemctl cat xxx 看一眼实际生效的配置,重点看三行:User= 是不是写错了用户(用户不存在会直接 217 退出);WorkingDirectory= 指向的目录存不存在;EnvironmentFile= 引用的文件在不在。改过 unit 文件后别忘了 systemctl daemon-reload,否则改了也白改——这是最常见的"我明明改了怎么没用"。

排查顺序总结:systemctl status 看退出码定方向 → journalctl -u 看完整报错找根因 → systemctl cat 核对 unit 配置有没有写错。修完先 systemctl start 试一次,确认能起来再 enable,别把没验证过的配置直接设成开机自启。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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