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
相关推荐
佳児素花痴╮7 小时前
C语言链接库
linux·运维·服务器
雷电小将军7 小时前
诡秘之主手游占卜家序列加点 诡秘之主手游占卜家怎么加点
服务器·网络·游戏·电脑·玩游戏
云飞云共享云桌面7 小时前
苏州昆山精密机械加工厂研发部门10个SolidWorks可以部署云飞云共享云桌面吗?
大数据·运维·服务器·自动化·汽车·制造
聚美智数7 小时前
图片水印-图片剪裁-图片缩放API接口介绍
java·服务器·数据库
wWYy.7 小时前
Linux发送数据包的过程
linux·网络
小嵌同学7 小时前
Linux 内核中的 Per-CPU 机制详解
linux·运维·arm开发·嵌入式
云飞云共享云桌面8 小时前
自动化设备厂 10 人研发团队,如何共用一台服务器做 SolidWorks 建模?
运维·服务器·网络·3d·自动化·制造
筝筝ba8 小时前
Configure IP Address Via Different User Roles And Verify(1)
服务器
QH139292318808 小时前
NVIDIA H200 H300服务器
运维·服务器·开发语言·网络·信息与通信
xixiaoyunya8 小时前
中小微企业轻量组网方案的技术选型与实践:从传统专线到软定义隧道的成本与效能分析
服务器·php·apache