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
相关推荐
SPC的存折1 天前
3、主从复制实现同步数据过滤
linux·运维·服务器
SPC的存折1 天前
openEuler 24.03 MariaDB Galera 集群部署指南(cz)
linux·运维·服务器·数据库·mysql
xcbrand1 天前
文旅行业品牌策划公司找哪家
大数据·运维·人工智能·python
SPC的存折1 天前
MySQL 8.0 分库分表
linux·运维·服务器·数据库·mysql
风吹迎面入袖凉1 天前
【Redis】Redisson分布式锁原理
java·服务器·开发语言
cyber_两只龙宝1 天前
【Oracle】Oracle之DQL中WHERE限制条件查询
linux·运维·数据库·云原生·oracle
斌味代码1 天前
Shell 性能监控:指标采集、告警规则与可视化大盘设计
运维
22信通小白1 天前
USRP初学者使用手册(基础配置及bug记录)——Linux+Clion(单台X310收发)
linux·运维·c++·5g·bug·信息与通信
网络安全许木1 天前
自学渗透测试第14天(信息收集进阶与指纹识别)
linux·网络安全·渗透测试
xlq223221 天前
40.线程控制
linux