Linux 服务启动失败的排查顺序

发布时间 - 2026-01-27 00:00:00    点击率:
排查 systemd 服务失败需四步:先看 systemctl status 确认 Active 状态、ExecStart 命令和 status=退出码;再用 journalctl -u -n 50 -e 查真实错误日志;接着验证配置语法并手动模拟启动;最后检查依赖服务、环境变量及工作目录。

先看 systemctl status 确认失败状态和退出码

这是排查起点,不是走形式。重点盯三处:Active: 行是否为 failedProcess: 行里 ExecStart= 后的完整命令;以及 status= 后的数字(比如 status=1/FAILURE)。这个退出码本身没意义,但结合日志就能定位是配置错、权限错,还是进程一启动就崩了。

  • 如果显示 inactive (dead) 且没报错,大概率是服务压根没被手动启过,别急着查日志
  • status=203/EXEC 常见于路径写错或二进制不存在(比如把 /usr/bin/nginx 写成 /usr/sbin/nginx
  • status=217/USER 多因 User= 配置项指定的用户不存在,或家目录不可访问

journalctl -u 服务名.service -n 50 -e 挖真实错误

日志里藏了所有“为什么失败”。加 -n 50

是防刷屏,-e 直接跳到末尾——最新一行往往就是致命错误。常见线索有:

  • Permission denied:不是单纯文件权限问题,要顺藤摸瓜查 SELinux 上下文(ls -Z)、AppArmor profile 或 systemd 的 ProtectSystem= 限制
  • Address already in use:端口被占,但注意 netstat -tulpn | grep :80 可能看不到被 systemd socket 激活的服务,得看 ss -tlnp
  • Failed to load environment files:检查 /etc/sysconfig/服务名 或 service 文件里 EnvironmentFile= 指向的路径是否存在、是否可读

验证配置语法 + 手动模拟启动

很多服务自带校验命令,不跑等于白配。而且配置文件权限不对,服务会静默忽略——比如 MySQL 发现 /etc/my.cnf 权限是 664 就直接跳过,连日志都不记。

  • Nginx:nginx -t,它会告诉你哪行配置错、哪个 include 路径不存在
  • Redis:redis-server --test-memory /etc/redis/redis.conf,还能顺便测内存
  • 手动执行:sudo -u www-data /usr/sbin/nginx -g 'daemon off;',能暴露环境变量缺失、工作目录不可写、动态库找不到等 systemd 日志里不显示的细节

检查依赖服务和启动时机

systemd 不是线性启动,而是按依赖图调度。一个服务 failed,可能只是上游没起来。别只盯着报错服务本身。

  • 运行 systemctl list-dependencies --reverse 服务名.service,看它依赖哪些 unit;再用 systemctl status 逐个查这些依赖的状态
  • 典型冲突:NetworkManager 和 systemd-networkd 同时启用,其中一个被 mask 但没停干净,导致 networking.service 卡在 activating
  • 时间敏感服务(如 NTP、证书自动续期)若在 After=multi-user.target 启动,可能因系统时间未同步而失败,得改用 After=time-sync.target

最常被跳过的其实是环境变量和工作目录——systemd 的默认环境极简,$PATH 可能不含 /usr/local/binWorkingDirectory= 不设的话,脚本里的相对路径全失效。这些点不显眼,但修起来最快。


# mysql  # linux  # redis  # nginx  # app  # 端口  # ai  # 环境变量  # 配置文件  # 为什么  # red  # include  # 不存在  # 再用  # 报错  # 先看  # 跳过  # 这是  # 走形式  # 顺藤摸瓜  # 都不  # 就能 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: php json中文编码为null的解决办法  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  如何在景安服务器上快速搭建个人网站?  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  Laravel如何使用.env文件管理环境变量?(最佳实践)  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  如何在云服务器上快速搭建个人网站?  如何在云主机上快速搭建网站?  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  Laravel怎么在Controller之外的地方验证数据  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  制作企业网站建设方案,怎样建设一个公司网站?  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  javascript日期怎么处理_如何格式化输出  JavaScript如何实现继承_有哪些常用方法  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  Laravel如何使用Blade组件和插槽?(Component代码示例)  Laravel观察者模式如何使用_Laravel Model Observer配置  利用python获取某年中每个月的第一天和最后一天  大同网页,大同瑞慈医院官网?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  jQuery 常见小例汇总  Python文件异常处理策略_健壮性说明【指导】  Laravel怎么实现模型属性的自动加密  如何快速搭建高效服务器建站系统?  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  如何获取免费开源的自助建站系统源码?  WEB开发之注册页面验证码倒计时代码的实现  如何选择PHP开源工具快速搭建网站?  如何快速辨别茅台真假?关键步骤解析  长沙做网站要多少钱,长沙国安网络怎么样?  js实现获取鼠标当前的位置  HTML 中如何正确使用模板变量为元素的 name 属性赋值  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  大连 网站制作,大连天途有线官网?  高防服务器租用首荐平台,企业级优惠套餐快速部署  Linux后台任务运行方法_nohup与&使用技巧【技巧】  海南网站制作公司有哪些,海口网是哪家的?  如何在搬瓦工VPS快速搭建网站?  如何在IIS中新建站点并配置端口与物理路径?  三星网站视频制作教程下载,三星w23网页如何全屏?  长沙企业网站制作哪家好,长沙水业集团官方网站?  C++时间戳转换成日期时间的步骤和示例代码  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  googleplay官方入口在哪里_Google Play官方商店快速入口指南  BootStrap整体框架之基础布局组件  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives