分组系统服务


10

我已经.service为构成我正在使用的系统的不同部分编写了大约六个文件。能够逐个启动整个系统非常有用,但我也想拥有一个可以在一次调用中启动整个系统的单元systemctl

最好的方法是什么?

Answers:


10

您需要一个target-type单元,并将所有服务单元列为Wants=依赖项。然后,您可以使用启动它systemctl start unitname.target。(确保不要在systemctl isolate这里使用;这将关闭所有服务的依赖关系树中的内容,而这可能是您不希望的。)


或者,您可以使用该部分中的WantedBy密钥[Install]并记下一个已经存在的目标。例如,如果您希望您的服务始终在其他用户登录之前启动,请使用multi-user.target
saiarcot89515年

是的,Wants=列出所有服务的目标类型似乎足以启动,但是我似乎找不到任何使用目标类型进行停止重新启动工作的方法。有没有允许的类型?
Magnus

马格努斯,您有没有找到一个好的解决方案?
山姆·亨德利

2
Sam,Magnus:似乎.target可以通过StopWhenUnneeded=yes在每个.service文件中使用来停止所需的服务。superuser.com/questions/470153/…–
jonnor

1
在我的特殊情况下,我可以利用systemd工具处理globing :)因此,对于a .target,我使用a进行启动,对于in,我使用停止systemctl stop foo.\*(因为所有涉及的服务的服务文件都以wit开头foo.)。
Magnus

2

PartOf除了目标中,您是否尝试过使用目标组的子单元Wants?例如:PartOf=foo.targetfoo-sub1.serviceWants=foo-sub1.service foo-sub2.servicefoo.target。我只是尝试了一下,仅通过启动和停止目标就可以启动和停止所有子单元。

PartOf =

配置与Requires =类似的依赖关系,但仅限于停止和重新启动单元。当systemd停止或重新启动此处列出的单元时,操作将传播到该单元。请注意,这是单向依赖性,对此单位的更改不会影响列出的单位。

当在a.service上使用PartOf = b.service时,此依存关系将在b.service的属性列表中显示为ConsistsOf = a.service。ConsistsOf =依赖关系不能直接指定。


欢迎来到U&L!如果您的帖子未提供问题的答案,则应在问题下方的“ 评论”部分发布。
尤里·贡恰鲁克

这提供了汤姆·亨特给出的答案的另一半-能够停止整个服务组。
Benny Jobigan '19
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.