是否可以使用一個目標重新啟動多個 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.service都已one-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) – 您需要擴充所有服務檔案。

相關內容