在实际运维中,判断一个服务是否正常,不能只看表面状态,而要形成一套“先看状态,再测端口,最后查日志”的排查习惯。以下是每个环节中实用、真实的步骤和常用命令。
1. 服务状态验证
首先要确认服务进程是否在运行,以及系统是否认为它正常。
- 使用 systemctl 查看服务状态(适用于 systemd 系统):
systemctl status nginx
输出中关注 Active: 字段,active (running) 表示正在运行;inactive 表示未启动;failed 表示启动失败。同时查看 Loaded: 确认是否已设为开机自启。
- 查看进程是否存在:
ps aux | grep nginx
或使用更简洁的 pgrep:
pgrep -a nginx
确保至少有一个主进程和工作进程存在。
- 查看服务监听的网络端口(见下一节),双重确认服务在预期的地址和端口上运行。
2. 端口检测
服务即使进程存在,也可能因为配置错误而没有监听正确的网络接口或端口,或者被防火墙拦截。端口检测三步走:
第一步:本地确认监听状态
ss -tlnp | grep :80
或使用传统命令 netstat -tlnp | grep :80。输出中会显示监听地址(如 0.0.0.0:80 表示所有接口,或 127.0.0.1:80 仅本地回环)以及对应的进程名。务必确认服务绑定的 IP 地址是否是你期望的,若只监听 127.0.0.1,外部将无法访问。
第二步:本地功能测试
在服务器本机用 curl 或 wget 测试服务返回是否正确:
curl -I http://localhost
或者对于非 HTTP 服务,使用 telnet 或 nc 测试 TCP 连接:
echo "quit" | telnet localhost 3306 # MySQL
如果能连接并看到服务响应(如 MySQL 会返回版本号),说明服务本身正常。
第三步:远程连通性测试
从其他机器测试网络可达性和端口开放情况:
telnet 服务器IP 80
或
nc -zv 服务器IP 80
如果连接失败,需要检查:
- 服务是否只监听了本地回环地址;
- 服务器本地防火墙(
iptables/firewalld/ufw)是否放行端口; - 云服务商的安全组规则是否配置正确。
3. 日志排查
当服务状态异常、端口不监听或请求返回错误时,日志是最直接的诊断依据。
定位日志位置
常见的日志路径:
- 系统日志:
/var/log/messages或/var/log/syslog - 服务专用日志:
/var/log/nginx/error.log、/var/log/mysql/error.log等 - systemd 管理的服务日志可通过
journalctl查看:
journalctl -u nginx --since "10 minutes ago"
高效查看日志的技巧
- 实时跟踪最新日志:
tail -f /var/log/nginx/error.log
- 搜索关键词,如
error、failed、denied:
grep -i error /var/log/nginx/error.log | tail -20
- 结合时间范围,避免淹没在海量信息中,可使用
sed或awk截取特定时间段:
awk '/2025-07-14 10:00/,/2025-07-14 10:15/' /var/log/syslog
根据日志快速定位常见问题
- 端口被占用:日志中会看到 “Address already in use”,用
ss -tlnp找出占用进程并处理。 - 权限拒绝:“Permission denied” 通常意味着文件权限或 SELinux/AppArmor 策略阻止了访问,检查相关目录权限和安全上下文。
- 配置语法错误:Nginx、Apache 等服务会在启动或重载时明确指出错误行号,例如 “nginx: [emerg] unexpected "}" in /etc/nginx/nginx.conf:42”,直接定位修改即可。
- 依赖服务不可用:如应用连接数据库失败,日志会提示 “Connection refused” 或 “Host is unreachable”,需检查数据库服务状态与网络连通性。
4. 基础排查流程总结
将上述步骤串联成固定思路:
- 查状态:
systemctl status <服务>和ps确认进程存活。 - 测本地端口:
ss -tlnp确认监听地址和端口正确。 - 做本地请求:
curl或telnet验证服务响应。 - 测远程连通:从外部机器访问目标端口,排除防火墙。
- 翻日志:服务自身的 error log 和系统日志,结合时间点和关键词逐层深挖。
掌握这个流程,足以应对大部分日常服务故障的初步诊断。每次操作前记得用 sudo 或切换到 root 账户以获得完整信息权限,并养成备份配置文件后再修改的习惯。