如何设置服务启动顺序 systemd依赖关系排序技巧
发布时间 - 2025-07-25 00:00:00 点击率:次systemd 控制服务启动顺序需使用 after 和 before 字段。1. wants= 表示软依赖,目标服务未启动不影响当前服务;2. requires= 表示硬依赖,目标服务必须成功启动;3. after= 指定当前服务在其之后启动的目标服务;4. before= 指定当前服务在其之前启动的目标服务;5. 建议配合使用 wants 和 after 避免滥用 requires;6. 可通过 systemctl list-dependencies 查看依赖关系;7. 配置时避免循环依赖,否则 systemd 会报错。
在用 systemd 管理服务的时候,控制服务的启动顺序是个常见需求。比如数据库得先启动,应用服务才能连接上。Systemd 本
身有一套依赖机制来处理这个问题,但如果不了解它的逻辑,容易配错或者误以为“重启就能好”。
理解 Wants 和 Requires
Systemd 中最基础的依赖关系是 Wants= 和 Requires=,它们都定义在 service 文件的 [Unit] 段中。
-
Wants=是软依赖:如果它指向的服务没启动成功,不影响当前服务。 -
Requires=是硬依赖:目标服务必须启动成功,否则当前服务也不会被启动。
这两个字段只表示“依赖哪些服务”,不直接控制启动顺序。也就是说,如果你只是加了 Wants=xxx.service,systemd 不保证这个服务会在你当前服务之前启动。
控制启动顺序靠的是 After 和 Before
真正决定启动顺序的是 After= 和 Before= 字段。比如你想让 A 服务在 B 之后启动,就在 A 的 service 文件里加上:
After=B.service
反过来如果你想让 A 在 B 前面启动,就给 A 加:
Before=B.service
通常做法是两者配合使用。例如:
# a.service [Unit] After=b.service # b.service [Unit] Before=a.service
虽然只写一个也能生效,但双向声明更清晰、不容易出错。
实际配置建议和注意事项
- 别滥用 Requires:除非服务必须存在,否则优先用 Wants + After。
-
跨层级依赖要小心:比如某个服务依赖网络,可以设置
After=network-online.target,同时加上Wants=network-online.target。 - 循环依赖会报错:比如 A 要在 B 后启动,B 又要在 A 后启动,systemd 会拒绝加载。
-
查看依赖关系可以用命令:
-
systemctl list-dependencies your-service systemctl list-dependencies --reverse your-service
-
总结一下怎么操作
举个例子:假设你有一个 webapp 服务,它需要等 mysql 启动后再启动。
-
编辑 webapp.service 文件:
sudo systemctl edit webapp.service
-
添加如下内容:
[Unit] Wants=mysql.service After=mysql.service
-
重载 systemd 配置:
sudo systemctl daemon-reload
-
重启或启动服务验证:
sudo systemctl restart webapp
基本上就这些。理解清楚 Wants/Requires 和 After/Before 的区别,再按需配置,就能控制好服务的启动顺序了。
# mysql
# 区别
# 循环
# 数据库
# 的是
# 如果你
# 就能
# 想让
# 报错
# 重启
# 是个
# 就在
# 也能
# 可以用
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
历史网站制作软件,华为如何找回被删除的网站?
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
如何快速搭建二级域名独立网站?
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】
Laravel如何实现本地化和多语言支持?(i18n教程)
JS中对数组元素进行增删改移的方法总结
如何利用DOS批处理实现定时关机操作详解
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法
HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】
JS经典正则表达式笔试题汇总
C语言设计一个闪闪的圣诞树
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
北京网站制作公司哪家好一点,北京租房网站有哪些?
网站页面设计需要考虑到这些问题
Laravel如何自定义分页视图?(Pagination示例)
香港服务器租用费用高吗?如何避免常见误区?
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
如何在宝塔面板中创建新站点?
如何破解联通资金短缺导致的基站建设难题?
Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
微信小程序 HTTPS报错整理常见问题及解决方案
Python图片处理进阶教程_Pillow滤镜与图像增强
如何用JavaScript实现文本编辑器_光标和选区怎么处理
🚀拖拽式CMS建站能否实现高效与个性化并存?
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
怎样使用JSON进行数据交换_它有什么限制
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
如何正确下载安装西数主机建站助手?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
如何挑选优质建站一级代理提升网站排名?
PHP 500报错的快速解决方法
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
如何获取PHP WAP自助建站系统源码?
Laravel如何使用Sanctum进行API认证?(SPA实战)
百度浏览器如何管理插件 百度浏览器插件管理方法
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
Laravel如何使用Service Container和依赖注入?(代码示例)
浅谈Javascript中的Label语句
如何挑选最适合建站的高性能VPS主机?
高防服务器租用如何选择配置与防御等级?
bing浏览器学术搜索入口_bing学术文献检索地址
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】

