Linux 服务管理故障排查小手册

本手册针对测试环境中高频出现的服务启动失败、端口占用、自启失效等问题,提供 systemctl 环境优先的排查步骤和解决方案。

一、 服务启动失败(最常见问题)

故障现象

执行 systemctl start 服务名 后提示 failed,或 systemctl status 服务名 显示 active(failed)

排查步骤

  1. 第一步:查看详细错误状态

    bash

    运行

    复制代码
    systemctl status 服务名 -l  # -l 参数显示完整日志信息

    重点关注 Active 状态和 Main PID 后的报错描述(如 permission deniedfile not found)。

  2. 第二步:查看服务日志(核心手段)

    bash

    运行

    复制代码
    journalctl -u 服务名 -f  # -f 实时跟踪最新日志
    journalctl -u 服务名 --since "10 minutes ago"  # 查看最近10分钟日志

    日志中会明确标注失败原因(如配置文件语法错误、依赖服务未启动)。

  3. 第三步:针对性解决常见原因

    报错原因 解决方案 测试场景示例
    配置文件语法错误 检查配置文件格式,修复后重载配置systemctl reload 服务名 Nginx 配置缺少分号 → 编辑 /etc/nginx/nginx.conf 修正
    权限不足 修改文件 / 目录权限chown -R 服务用户:用户组 目标路径``chmod 755 可执行文件 MySQL 无法写入数据目录 → chown -R mysql:mysql /var/lib/mysql
    依赖服务未启动 先启动依赖服务,再启动目标服务 Tomcat 依赖 Java → 先装 JDK 再启动 systemctl start tomcat
    端口被占用 参考下文「端口占用问题」解决 Nginx 占用 80 端口失败 → 找到占用进程并终止

二、 服务端口被占用

故障现象

服务启动时报 address already in use,或 netstat/ss 显示端口被其他进程占用。

排查步骤

  1. 查找占用端口的进程

    bash

    运行

    复制代码
    # 方法1:ss 命令(推荐,比 netstat 高效)
    ss -tulnp | grep 端口号
    # 方法2:netstat 命令
    netstat -tulnp | grep 端口号

    输出结果中 PID/进程名 即为占用端口的进程。

  2. 解决端口占用

    • 方案 1:终止占用进程(适用于无关进程) bash

      运行

      复制代码
      kill -9 进程PID  # 强制终止进程
    • 方案 2:修改服务端口(适用于无法终止的进程)编辑服务配置文件,更换未被占用的端口,重启服务。

    • 方案 3:配置服务端口复用(部分服务支持)如 Nginx 可配置 listen 端口号 reuseport;

三、 服务开机自启失效

故障现象

系统重启后,已配置 enable 的服务未自动启动。

排查步骤

  1. 检查自启状态

    bash

    运行

    复制代码
    systemctl is-enabled 服务名
    • 若显示 disabled → 重新执行 systemctl enable 服务名
    • 若显示 enabled 但未启动 → 继续下一步
  2. 检查服务是否被 mask(冻结)

    bash

    运行

    复制代码
    systemctl is-masked 服务名

    若显示 masked → 先解除冻结再启用

    bash

    运行

    复制代码
    systemctl unmask 服务名
    systemctl enable 服务名 --now  # --now 立即启动服务
  3. 检查系统启动优先级 部分服务因启动优先级过低,依赖资源未就绪导致启动失败,可通过 systemctl edit 服务名 调整启动顺序。

四、 服务运行中异常崩溃

故障现象

服务启动后一段时间自动退出,status 显示 active(failed)inactive(dead)

排查步骤

  1. 查看崩溃前日志

    bash

    运行

    复制代码
    journalctl -u 服务名 -e  # -e 跳转到日志末尾

    重点关注崩溃前的 ERROR/FATAL 级日志。

  2. 检查系统资源

    • 内存不足:free -h → 测试环境扩容或关闭无关服务
    • 磁盘满:df -h → 清理日志 / 临时文件(如 /var/log 下的旧日志)
    • CPU 过高:top → 排查服务是否存在内存泄漏或死循环
  3. 测试环境临时解决方案配置服务自动重启,避免频繁手动干预:

    bash

    运行

    复制代码
    systemctl edit 服务名

    在打开的文件中添加以下内容,保存退出:

    ini

    复制代码
    [Service]
    Restart=always
    RestartSec=3  # 崩溃后3秒自动重启

    重新加载配置并重启服务:

    bash

    运行

    复制代码
    systemctl daemon-reload
    systemctl restart 服务名

五、 传统 service 命令环境故障排查补充

对于 CentOS 6 等老旧系统,无 journalctl 日志工具,需:

  1. 查看服务脚本日志:/var/log/messages/var/log/服务名.log
  2. 检查 /etc/init.d/服务名 脚本是否有执行权限:chmod +x /etc/init.d/服务名
  3. 配置自启:chkconfig 服务名 on
相关推荐
十六年开源服务商2 小时前
WordPress网站信誉评价与运维服务怎样提升
运维
LUCIFER2 小时前
[驱动之路(九)——UART(串口)子系统]学习总结,万字长篇,一文彻底搞懂UART(串口)子系统(含串口数据收发流程解析)
linux·驱动开发
无代码专家2 小时前
生产ERP解决方案:重构制造企业数字化运营体系
运维·低代码·重构·制造
忙里偷闲学python2 小时前
ceph介绍和安装
linux·ceph·kubernetes
学习中....3 小时前
Claude Code + mcp-ssh-manager:让AI成为随身运维专家
运维·ssh
zhong_kh3 小时前
字符串判断
linux·运维·服务器
来鸟 鸣间3 小时前
i2c_add_driver关键流程
linux·i2c
fengyue01103 小时前
C++使用epoll实现高并发tcp服务
linux·服务器·网络·c++
谷雨不太卷3 小时前
Linux_文件指令
linux·运维·服务器