Systemd 單元檔案中 Wants= 與 WantedBy= 的最佳實踐

Systemd 單元檔案中 Wants= 與 WantedBy= 的最佳實踐

據我從文檔中可以看出系統Wants=WantedBy=執行相同的功能,只不過前者放入依賴單元檔案中,反之亦然。 (然後WantedBy=建立unit.type.wants目錄並用符號連結填滿它。)

DigitalOcean:了解 Systemd 單元和單元文件

該指令...允許您以與該部分中的指令WantedBy=類似的方式指定依賴關係。不同之處在於,該指令包含在輔助單元中,允許列出的主要單元保持相對乾淨。Wants=[Unit]

這真的只是為了保持單元文件“乾淨”嗎?使用這兩個指令的最佳實踐是什麼?也就是說,如果服務 alpha “想要”服務 beta,我應該何時使用Wants=beta.serviceinalpha.service以及何時應該WantedBy=alpha.service在 中使用beta.service

答案1

功能上

Wants位於Unit部分 且WantedBy位於Install.

init 程序根本systemd不處理/使用該Install部分。相反,必須在 中建立符號連結multi-user.target.wants。通常,這是由systemctl讀取該部分的實用程式完成的Install

總之,WantedBysystemctl enable/影響systemctl disable

邏輯上

考慮哪些服務應該「知道」或「意識到」另一個服務。例如,常見的用法是WantedBy

[Install]
WantedBy=multi-user.target

或者,也可以在 multi-user.target :

[Unit]
Wants=nginx.service

但第二種方式沒有意義。從邏輯上講,nginx.service 知道系統定義的 multi-user.target,而不是相反。

因此,在您的範例中,如果 alpha 的作者知道 beta,那麼 alphaWants就是 beta。如果 beta 的作者知道 alpha,那麼 beta 就是WantedByalpha。

為了幫助您做出決定,您可以考慮可以在不存在其他服務的情況下安裝哪個服務(例如,從套件管理器)。

配置目錄

作為您盒子中的另一個工具,請知道 systemd 檔案也可以使用設定目錄進行擴充: /etc/systemd/system/myservice.service.d/extension.conf

這允許您添加依賴項,其中兩個服務最初都不是為了了解另一個服務而創建的。我經常將其與掛載一起使用,例如,nginx 和掛載都不需要明確了解對方,但我作為系統管理員了解依賴性。所以我nginx.service.d/mymount.confWants=mnt-my.mount.

答案2

這些在功能上並不相同。設定Wants=(和符號連結檔案)是依賴項。此WantedBy=設定控制啟用/停用服務時此類依賴項的建立/銷毀。

所以沒有最好的實踐。有正確的實踐。對於任何給定情況,兩者中只有一個具有正確的功能。要嘛想要擁有始終存在的持久依賴關係,要嘛想要擁有可以使用enable/開啟和關閉的暫時依賴關係disable

相關內容