Linux systemd 服务依赖关系解析-linux运维

绝大多数场景应使用 Wants 而非 Requires;Wants 是软依赖,目标失败不影响本服务启动,Requires 是硬依赖,目标失败将导致本服务进入 failed 状态,且两者均需配合 After/Before 才能控制启动顺序。

systemd 服务依赖用 Wants 还是 Requires?

Wants 和 Requires 都声明依赖,但行为完全不同:前者只“希望”目标服务启动,失败也不影响本服务;后者则强制要求目标服务必须成功启动,否则本服务直接失败并进入 failed 状态。实际写单元文件时,绝大多数场景该用 Wants ——比如 Web 服务想等网络就绪,用 Wants=network-online.target 更健壮;若误写成 Requires,只要 systemd-networkd-wait-online.service 超时(默认 90 秒),你的服务就起不来。

  • Requires 触发硬依赖,会阻塞本服务的 start 流程
  • Wants 是软依赖,目标服务启动失败或未定义,本服务照常运行
  • 两者都不隐含启动顺序控制,需配合 After 或 Before 使用

After 和 Before 不等于依赖,漏写 Wants/Requires 就白配

After=redis-server.service 只表示“我比 redis 启动晚”,但如果 redis 没被其他服务激活、也没设为开机启动,它根本不会启动——你的服务就会卡在“等待一个永远不会出现的时机”。常见错误是只写 After,结果服务启动时报 Job for xxx.service failed because a dependency job failed,日志里却看不到 redis 的任何启动记录。

  • 必须成对使用:Wants=redis-server.service + After=redis-server.service
  • After 不触发目标服务启动,仅排序;Wants 才真正拉起依赖
  • 若目标服务是 target(如 multi-user.target),Wants 通常已由系统预设,此时只补 After 即可

如何查清某个服务实际依赖了哪些单元?

别信文档或猜测,用 systemctl list-dependencies --reverse xxx.service 看谁依赖它;用 systemctl list-dependencies --all xxx.service 看它自己依赖了哪些(含间接依赖)。注意默认只显示 active 单元,加 --all 才能看到所有声明的依赖,包括那些没启用、甚至不存在的单元。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » Linux systemd 服务依赖关系解析-linux运维
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4015981+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4015982+
  • 本周更新: 0+
  • 最后更新: 2026-03-16