折页
← 返回笔记目录
Linux / 01

服务启动了,
为什么还是不能用?

先分清三个问题:进程是否运行、下次是否启动、请求是否真的成功。

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 管理服务的环境。容器、其他初始化系统和不同安装包,可能采用不同的管理方式。

继续阅读

systemctl 官方手册 ↗ · journalctl 官方手册 ↗

← 笔记目录下一篇:一次域名解析 ↗