Soweit ich es aus der Dokumentation ersehen kann,systemdund führen dieselbe Funktion Wants=
aus WantedBy=
, außer dass ersteres in die abhängige Unit-Datei eingefügt wird und umgekehrt. (Dadurch WantedBy=
wird das unit.type.wants
Verzeichnis erstellt und mit symbolischen Links gefüllt.)
AusDigitalOcean: Systemd-Units und Unit-Dateien verstehen:
Mit der
WantedBy=
Direktive ... können Sie eine Abhängigkeitsbeziehung auf ähnliche Weise angeben wie mit derWants=
Direktive im[Unit]
Abschnitt. Der Unterschied besteht darin, dass diese Direktive in die Hilfseinheit aufgenommen wird, sodass die aufgeführte primäre Einheit relativ sauber bleibt.
Geht es wirklich nur darum, eine Unit-Datei „sauber“ zu halten? Was ist die beste Vorgehensweise bei der Verwendung dieser beiden Anweisungen? Das heißt, wenn Service Alpha Service Beta „will“, wann sollte ich Wants=beta.service
in verwenden und wann sollte ich in alpha.service
bevorzugen ? WantedBy=alpha.service
beta.service
Antwort1
Funktional
Wants
befindet sich im Unit
Abschnitt und WantedBy
befindet sich in der Install
.
Der Init-Prozess systemd
verarbeitet/verwendet den Install
Abschnitt überhaupt nicht. Stattdessen muss ein symbolischer Link in erstellt werden multi-user.target.wants
. Normalerweise wird das von dem Dienstprogramm erledigt systemctl
, das den Abschnitt liest Install
.
In Summe,WantedBy
wird beeinflusst von systemctl enable
/ systemctl disable
.
Logisch
Überlegen Sie, welche Dienste die anderen „kennen“ oder „bewusst“ sein sollten. Eine häufige Verwendung von WantedBy
:
[Install]
WantedBy=multi-user.target
Alternativ könnte das in multi-user.target sein:
[Unit]
Wants=nginx.service
Aber dieser zweite Weg macht keinen Sinn. Logischerweise kennt nginx.service das systemdefinierte multi-user.target, nicht umgekehrt.
Wenn also in Ihrem Beispiel der Autor von Alpha von Beta weiß, dann ist Alpha Wants
Beta. Wenn der Autor von Beta von Alpha weiß, dann ist Beta WantedBy
Alpha.
Um Ihnen die Entscheidung zu erleichtern, können Sie überlegen, welcher Dienst (beispielsweise von einem Paketmanager) installiert werden kann, ohne dass der andere vorhanden ist.
Konfigurationsverzeichnisse
Als weiteres Tool in Ihrem Werkzeugkasten sollten Sie wissen, dass systemd-Dateien auch mit Konfigurationsverzeichnissen erweitert werden können: /etc/systemd/system/myservice.service.d/extension.conf
Auf diese Weise können Sie Abhängigkeiten hinzufügen, bei denen keiner der beiden Dienste ursprünglich vom anderen Kenntnis haben soll. Ich verwende dies häufig bei Mounts, bei denen (zum Beispiel) weder nginx noch der Mount explizite Kenntnis vom anderen benötigen, ich als Systemadministrator jedoch die Abhängigkeit verstehe. Daher erstelle ich nginx.service.d/mymount.conf
mit Wants=mnt-my.mount
.
Antwort2
Diese sind funktional nicht identisch. Die Wants=
Einstellung (und die symbolischen Linkdateien) ist die Abhängigkeit. Die WantedBy=
Einstellung steuert die Erstellung/Zerstörung einer solchen Abhängigkeit, wenn ein Dienst aktiviert/deaktiviert wird.
Es gibt also keineam bestenüben. Es gibtrichtigPraxis. Nur einer der beiden hat die richtige Funktionalität für eine bestimmte Situation. Entweder möchte man eine dauerhafte Abhängigkeit haben, die immer besteht, oder man möchte eine vorübergehende Abhängigkeit haben, die mit enable
/ ein- und ausgeschaltet werden kann disable
.