是否可以通过一个目标重新启动多个 systemd 服务?

是否可以通过一个目标重新启动多个 systemd 服务?

我有许多需要重启的服务单元文件,但我不想把它们全部输入出来。是否可以有一个目标或服务,它不知道如何启动其他服务,但将它们组合在一起,这样它们就都可以通过一个命令重启?

如果我想要的话,我该如何编写我的 systemd 服务单元文件或目标文件systemctl restart one-to-rule-them-all

要求:1. uber 目标需要启动许多其他服务。2. uber 目标不应该知道如何启动这些服务。

当我尝试这样做时,sudo systemctl restart one-to-rule.target什么也没有发生。

# /etc/systemd/system/one-to-rule.target
[Unit]
Description=One To Rule Them All
Requires=multi-user.target
Wants=program-api.service  program-gui.service yet-another.service
After=multi-user.target display-manager.service

[Install]
WantedBy=graphical.target

这些单元program-api.service program-gui.service yet-another.serviceone-to-rule.target所有单元都已启用,并且它们似乎都已加载并处于活动状态。我可以启动机器,并且所有服务都完全按照我的要求启动。但是,我只想输入systemctl restart one-to-rule.target或执行其他操作,而不是重新启动。

依赖关系图如下所示

$ systemctl list-dependencies one-to-rule.target
one-to-rule.target
● ├─program-api.service
● ├─program-gui.service
● ├─yet-another.service
● └─multi-user.target

$ systemctl list-dependencies --reverse one-to-rule.target
one-to-rule.target
● └─graphical.target

答案1

这可以工作,但每个 .service 单元必须具有PartOf=one-to-rule.target才能将重启传播给它们。(这实际上只是 的弱化版本Requires=<…>.target。)

不幸的是,无法直接在目标中指定相反的依赖关系(ConsistsOf)——您需要扩展所有服务文件。

相关内容