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

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

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

故障现象

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

排查步骤

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

    bash

    运行

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

    重点关注 Active 状态和 Main PID 后的报错描述(如 permission denied、file 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
相关推荐
qeen873 小时前
【Linux】Linux环境下的进程终止与进程等待问题
linux·运维·服务器
机核研创社4 小时前
短裤自动化工序与设备清单:十个点位、三项技术要点与选型裁决顺序
运维·自动化
尹人入圣4 小时前
市面上IP驱动产业新场景新工具
运维·网络·python·tcp/ip
衍玊4 小时前
常见i/o模型以及高性能服务器设计
服务器
Dovis(誓平步青云)4 小时前
多个链接不等于多份证据,新闻核验看板怎样合并来源
java·服务器·前端·javascript·人工智能·pdf·电脑
LRL_4 小时前
【实战指南】Node.js 跨平台依赖下载:如何在 Windows/Linux 环境下互跨下载目标系统的 npm/pnpm 包
linux·windows·node.js
高山有多高5 小时前
【Linux笔记】网络命令
linux
Dovis(誓平步青云)5 小时前
几个方案来回选不定?做一个随时切换的候选推荐页
android·java·服务器·开发语言·javascript·数据库·智能化
一条破秋裤5 小时前
Linux 线程同步:读写锁
java·linux·jvm
JieDavid6 小时前
奇智创达知识产权管理系统期限监控模块实操,告别人工期限疏漏,实现管理闭环!
大数据·运维·人工智能·经验分享·重构