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
相关推荐
chlk12311 小时前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑11 小时前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件12 小时前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
碳基沙盒12 小时前
OpenClaw 多 Agent 配置实战指南
运维
深紫色的三北六号21 小时前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash1 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI1 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行2 天前
Linux和window共享文件夹
linux
Sinclair2 天前
简单几步,安卓手机秒变服务器,安装 CMS 程序
android·服务器
木心月转码ing2 天前
WSL+Cpp开发环境配置
linux