Linux - systemd 依赖

如果 关于依赖的规则 如果太严格,会破坏 性能和稳定性。比如,如果 设置 命令行在数据库 启动以后 才能启动。这样的话,如果数据库启动失败了 且严格按照规则,命令行都无法出来。
Unix启动时的 任务 高度容错;任务常会失败 但不会给 标准服务 造成 严重 的问题。
为满足 灵活和容错,systemd 提供了多种依赖类型:
Requires: 严格依赖。如果被依赖的 单元 启动失败,依赖它 的单元也不会被启动。
Wants:在启动一个 单元的时候,systemd 会去启动 它的 wants 单元。但是不管 wants 单元有没有启动成功,该单元都会被启动。
Requisite:我们在 启动 拥有requisite依赖 的单元的时候,会先去看 这个requisite 依赖 有没有 起起来,如果没有,该单元也起不起来。
Conflicts:当 启动一个 拥有conflict依赖的单元,如果那个 依赖单元 是 已启动的,systemd 会去把它关掉。同时启动 冲突单元 的话,都会失败。
尽量使用 wants,因为它 不会导致 启动失败。
查看某个单元的依赖:
# systemctl -p wants unit

次序

require 或者 wants 可能 会让 多个单元同时启动。有时我们需要先后启动。
使用以下标记:
before: 在 before 单元 之前启动
After:在 After 单元 之后启动
当你使用排序,systemd 会等待 被依赖的单元 变成 已启动,才启动依赖的单元。

默认的隐含的依赖

systemd 对 目标单元 添加 after,如果这些单元有 wants。这些依赖 是 systemd 内部的,不会存在配置文件里。
当 target 单元里 是 服务单元,systemd 不会给 它加默认 依赖。systemd 添加 默认 依赖,是为了减少错误 和 减少单元配置文件的体量。
defaultdependencies=no 可以禁止 默认依赖的 注入。

条件依赖

用条件依赖参数 来测试 各种操作系统状态。比如:
conditionPathExists=p 路径(文件)存在
ConditionPathIsDirectory=p  是一个路径
ConditionFileNotEmpty=p 文件不空
如果 条件依赖 是false 单元就不会启动。但是 这个单元 所依赖的单元,他们会被启动。
可以参考 systemd.unit(5)用户手册。

[install] 和 enabling 单元

可以在 [install] 里 配置 wantedby 或者 requiredby 来表示 被依赖。

enable 单元,实际上是创建 到被依赖 单元 的链接:

# systemctl enable test1.target
Created symlink /etc/systemd/system/test2.target.wants/test1.target → /etc/systemd/system/test1.target.
disable 单元 或者 删除 enable 产生的 链接,可以用:

对于 一般的操作,systemd 会忽略 [Install] 部分。重启后,enable 依然有效。
系统配置目录(/etc/systemd/system)下,的 .wants 和 .requires 目录,往往和 [Install]有关。单元配置路径([/usr]/lib/systemd/system)下,也有.wants 子目录,可以手动加链接。但是不推荐这样做,手工创建依赖,不容易维护。

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值