1. 从当前状态开始
在使用 systemd 的 Linux 系统上,服务通常以 unit 的形式管理。先看状态,再看日志;不要把重复重启当成诊断过程。
systemctl status nginx.service --no-pager
journalctl -u nginx.service -n 50 --no-pager这里的 nginx.service 是示例名称。第一条查看状态,第二条读取最近的服务日志。日志里可以找到错误发生的位置,再回头检查配置、文件或权限。
2. 运行与开机启动是两件事
一次手动启动不等于配置了开机启动。反过来,允许开机启动的服务,也可能因为错误而没有正常运行。
systemctl is-active nginx.service
systemctl is-enabled nginx.service前者回答当前状态,后者回答启用状态。把两个问题分开记录,重启机器后的现象才更容易解释。
3. 服务运行,不等于请求可用
状态显示 active 后,还需要检查服务监听的位置,以及客户端能否获得预期响应。
- 只监听本机地址,还是对外地址?
- 端口是否正确,防火墙是否允许访问?
- 请求使用的主机名与服务配置是否一致?
- 响应内容是否正确,而不只是返回了一个状态码?
这些问题可以按「进程 → 监听 → 网络 → 请求」的顺序检查。每一步保留一条结果,比只记下“重启后好了”更有参考价值。
4. 修改前后,各留一个检查点
修改配置前保留原文件;修改后先使用服务自己的配置检查工具,再决定是否重新加载。排查时一次只改一个明确相关的因素,便于判断哪个改动产生了效果。
本文适用于使用 systemd 管理服务的环境。容器、其他初始化系统和不同安装包,可能采用不同的管理方式。