據我從文檔中可以看出系統,Wants=
並WantedBy=
執行相同的功能,只不過前者放入依賴單元檔案中,反之亦然。 (然後WantedBy=
建立unit.type.wants
目錄並用符號連結填滿它。)
從DigitalOcean:了解 Systemd 單元和單元文件:
該指令...允許您以與該部分中的指令
WantedBy=
類似的方式指定依賴關係。不同之處在於,該指令包含在輔助單元中,允許列出的主要單元保持相對乾淨。Wants=
[Unit]
這真的只是為了保持單元文件“乾淨”嗎?使用這兩個指令的最佳實踐是什麼?也就是說,如果服務 alpha “想要”服務 beta,我應該何時使用Wants=beta.service
inalpha.service
以及何時應該WantedBy=alpha.service
在 中使用beta.service
?
答案1
功能上
Wants
位於Unit
部分 且WantedBy
位於Install
.
init 程序根本systemd
不處理/使用該Install
部分。相反,必須在 中建立符號連結multi-user.target.wants
。通常,這是由systemctl
讀取該部分的實用程式完成的Install
。
總之,WantedBy
受systemctl 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 就是WantedBy
alpha。
為了幫助您做出決定,您可以考慮可以在不存在其他服務的情況下安裝哪個服務(例如,從套件管理器)。
配置目錄
作為您盒子中的另一個工具,請知道 systemd 檔案也可以使用設定目錄進行擴充: /etc/systemd/system/myservice.service.d/extension.conf
這允許您添加依賴項,其中兩個服務最初都不是為了了解另一個服務而創建的。我經常將其與掛載一起使用,例如,nginx 和掛載都不需要明確了解對方,但我作為系統管理員了解依賴性。所以我nginx.service.d/mymount.conf
用Wants=mnt-my.mount
.
答案2
這些在功能上並不相同。設定Wants=
(和符號連結檔案)是依賴項。此WantedBy=
設定控制啟用/停用服務時此類依賴項的建立/銷毀。
所以沒有最好的實踐。有正確的實踐。對於任何給定情況,兩者中只有一個具有正確的功能。要嘛想要擁有始終存在的持久依賴關係,要嘛想要擁有可以使用enable
/開啟和關閉的暫時依賴關係disable
。