Linux 服务启动失败怎么查?`systemctl status` 和日志怎么看
服务启动失败时,别急着重装环境。先看 `systemctl status`、journal 日志和配置语法,判断是配置错误、端口冲突、权限问题还是依赖服务没起来。
Linux 上一个服务起不来,问题不一定在服务本身。有时是配置写错,有时是端口被占用,有时是权限不对,也可能是数据库、Redis、证书文件没准备好。单看“failed”这两个字没有意义,关键是把日志看懂。
先看状态,不要先重启
systemctl status 服务名
这条命令会告诉你服务是 `active`、`failed` 还是 `inactive`,以及最近一次失败的简短原因。很多时候,状态窗口里已经有一半答案。
再看日志
journalctl -u 服务名 -n 80 --no-pager
日志里如果出现:
- `address already in use`,说明端口冲突
- `permission denied`,说明权限不对
- `no such file or directory`,说明文件路径或配置缺失
- `syntax error`,说明配置语法错了
不同报错,处理方式完全不同。
常见判断
| 报错 | 可能原因 | 先处理什么 |
|---|---|---|
| `failed to start` | 总体启动失败 | 看 journal |
| `address already in use` | 端口占用 | 查 `ss -lntp` |
| `permission denied` | 文件或目录权限 | 查文件属主和权限 |
| `no such file or directory` | 路径缺失 | 查配置路径 |
| `config test failed` | 配置语法错 | 先修配置再重启 |
配置先测试
sshd -t
nginx -t
php-fpm -t
不同服务都有自己的测试命令。能测语法的先测语法,别直接重启。
有些失败不是服务自己的问题
例如网站服务起不来,实际是数据库没启动;邮件服务失败,可能是 SMTP 配置错了;反代服务失败,可能是上游地址写错。这种情况要把依赖也一起看,不要只盯着当前进程。