Best Practice für Wants= vs WantedBy= in Systemd-Unit-Dateien

Best Practice für Wants= vs WantedBy= in Systemd-Unit-Dateien

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.wantsVerzeichnis 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 der Wants=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.servicein verwenden und wann sollte ich in alpha.servicebevorzugen ? WantedBy=alpha.servicebeta.service

Antwort1

Funktional

Wantsbefindet sich im UnitAbschnitt und WantedBybefindet sich in der Install.

Der Init-Prozess systemdverarbeitet/verwendet den InstallAbschnitt ü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,WantedBywird 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 WantsBeta. Wenn der Autor von Beta von Alpha weiß, dann ist Beta WantedByAlpha.

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.confmit 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.

verwandte Informationen