The*_*eer 12 dependencies systemd systemd-unit
# systemd-timesyncd.service
...
Before=time-sync.target sysinit.target shutdown.target
Conflicts=shutdown.target
Wants=time-sync.target
Run Code Online (Sandbox Code Playgroud)
systemd-timesyncd.service
应该开始之前 time-sync.target
。这定义了一个排序依赖。
但同时systemd-timesyncd.service
要 time-sync.target
。那么time-sync.target
它的需求依赖是什么
这种关系的用例是什么,为什么它们彼此之间没有冲突?
Ste*_*itt 16
这种双重关系的用例类似于“提供”关系。systemd-timesyncd
提供时间同步服务,因此它满足单元对 的任何依赖time-sync.target
。它必须在之前启动,time-sync.target
因为它对于任何依赖时间同步的服务都是必要的,并且它想要,time-sync.target
因为任何依赖时间同步的单元都应该与systemd-timesyncd
服务一起启动。
我认为误解来自你对“想要”的解释。systemd 中的“想要”关系不是依赖:systemd-timesyncd
不需要time-sync
起作用。这是一个“一起开始”的关系:它表示配置单元 ( systemd-timesyncd.service
) 希望列出的单元 ( time-sync.target
) 与其一起开始。
另请参阅systemd 中提供 time-sync.target 的服务?
该机制的目的是确保排序关系可以建立,但除非必要,否则不生效。
time-sync.target
是订购里程碑。所有这一切提供“时间同步”的服务,指定他们Before
的time-sync.target
,所以目标只有准备好一次“时间同步”生效。所有这一切需要“时间同步”,以生效,当他们运行指定,他们是服务After
的time-sync.target
。
如果后者也Wants
与该目标有关系,那么它们最终总是会被它排序,因为它总是包含在有序的事物集中。
在实际上没有具体的“时间同步”服务的情况下,这被认为是次优的;系统人员的想法是,在这种情况下,这种排序不应该有效。相反,服务应该像time-sync.target
不存在一样订购,如果这是没有里程碑的“自然”位置,则允许其中一些服务更早启动。
解决方案是time-sync.target
实际上不在那里。期望在时间同步可用后启动的服务不需要它。因此,如果仅启动这些服务,则它不存在于有序事物集中。只有在启动了实际的“时间同步”服务时才将其带入集合,而该服务(而不是客户端服务)具有将Wants
其带入的关系。
目标不一定是服务的集合。他们也可以订购里程碑。
在 systemd 和其他地方,有很多这样的纯粹里程碑。name-services
nosh 工具集的服务包集合中的目标是一个类似的纯排序里程碑。
system-control
. 小吃指南。软件。 归档时间: |
|
查看次数: |
1909 次 |
最近记录: |