跳到主要内容

Linux 服务启动失败怎么查

Linux 服务启动失败时,不要只看一句 failed。systemd 通常已经记录了足够多的线索,你需要按顺序把它们找出来。

第一步:查看服务状态​

systemctl status 服务名

例如:

systemctl status nginx

重点看:

  • Loaded:服务单元是否加载成功。
  • Active:当前状态。
  • Main PID:主进程。
  • 最近几行日志。

如果服务名不确定,可以列出服务:

systemctl list-units --type=service | grep nginx

第二步:查看完整日志​

journalctl -u 服务名 -n 100

实时跟踪:

journalctl -u 服务名 -f

只看本次启动:

journalctl -b -u 服务名

日志通常会告诉你配置文件路径、权限问题、端口占用、依赖缺失等信息。

第三步:检查配置文件​

很多服务提供配置检查命令。例如 Nginx 常用:

nginx -t

不同服务命令不同,请以服务文档为准。

如果没有专门检查命令,至少可以:

sudo systemctl cat 服务名

查看 systemd unit 文件内容,确认 ExecStart 指向的程序和参数。

第四步:检查端口占用​

如果日志提示端口已被占用:

ss -tulpn | grep ":80"

找到占用端口的进程后,再决定是停止旧服务、换端口,还是修改配置。

第五步:检查权限和路径​

常见问题包括:

  • 配置文件不存在。
  • 数据目录不存在。
  • 服务用户没有读写权限。
  • 可执行文件路径错误。

你可以检查:

ls -l /path/to/file
ls -ld /path/to/dir

如果服务以特定用户运行,还要确认该用户有权限访问这些路径。

第六步:重新加载或重启​

修改 unit 文件后:

sudo systemctl daemon-reload

重启服务:

sudo systemctl restart 服务名

查看状态:

systemctl status 服务名

如果只是修改服务自己的配置,有些服务支持 reload:

sudo systemctl reload 服务名

前提是该服务支持 reload。

常见原因清单​

现象可能原因
配置解析失败配置语法错误
Permission denied文件、目录或端口权限不足
Address already in use端口被占用
No such file or directory路径写错或文件缺失
Start request repeated too quickly服务反复失败,触发 systemd 限制
Dependency failed依赖服务没有启动

小结​

服务启动失败时,按这个顺序查:

systemctl status 服务名
journalctl -u 服务名 -n 100
systemctl cat 服务名
ss -tulpn

先读日志,再改配置。不要只凭经验重启很多次。