GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum enthalten die meisten Systemd-Beispiele Wantedby=multi-user.target?

Ich habe gelesen, was multi-user.target und die systemd-Dokumentation ist, die besagt, dass multi-user.target ein spezielles Ziel ist. Außerdem enthalten viele der systemd-Beispiele diese Zeile.

  1. Warum enthalten so viele Beispieldienste diese Zeile?
  2. Was würde passieren, wenn sie WantedBy=multi-user.target nicht enthalten würden?
  3. Können Sie mir ein Beispiel dafür geben, wann es tatsächlich ratsam wäre, diese Zeile nicht in eine Dienstdateidefinition aufzunehmen?
  4. In diesem Sinne, wann ist es eine gute Idee, diese Linie beizubehalten?

Akzeptierte Antwort:

1.) multi-user.target ist im Grunde das nächste Äquivalent zum klassischen SysVinit-Runlevel 3, das systemd verfügt über. Wenn ein systemd System bootet, systemd versucht, den Systemstatus mit dem durch default.target angegebenen Status abzugleichen – was normalerweise ein Alias ​​für entweder graphical.target ist oder multi-user.target .

multi-user.target definiert normalerweise einen Systemzustand, in dem alle Netzwerkdienste gestartet sind und das System Anmeldungen akzeptiert, aber keine lokale GUI gestartet wird. Dies ist der typische Standardsystemstatus für Serversysteme, bei denen es sich um in einem Rack montierte Headless-Systeme in einem entfernten Serverraum handeln kann.

graphical.target ist ein weiterer möglicher Alias ​​für default.target . Normalerweise ist es als Obermenge von multi-user.target definiert :Es enthält alles, was multi-user.target enthält tut, plus die Aktivierung einer lokalen GUI-Anmeldung. So ähnlich wie Runlevel 5 im klassischen SysVinit.

Die Zeile WantedBy=multi-user.target in einem Dienst ist im Wesentlichen dasselbe wie die Angabe „dieser Dienst sollte in den Runlevels 3, 4 und 5 starten“ in SysVinit-Systemen:Es teilt systemd mit dass dieser Dienst als Teil des normalen Systemstarts gestartet werden sollte, unabhängig davon, ob eine lokale GUI aktiv ist oder nicht.

Allerdings WantedBy ist vom aktivierten/deaktivierten Zustand getrennt:In einem anderen Sinne ist es also eine Art „Voreinstellung“:Es bestimmt, unter welchen Bedingungen der automatische Start erfolgen kann, aber nur, wenn der Dienst überhaupt aktiviert ist.

2.) wenn Sie WantedBy=multi-user.target weglassen Zeile und kein anderer aktivierter Dienst enthält ein Requires=your.service oder Wants=your.service in seiner Dienstdefinition wird Ihr Dienst nicht automatisch gestartet.

systemd funktioniert bei Abhängigkeiten und beim Booten, wenn nichts Requires ist oder Wants Ihr Dienst, wird er nicht gestartet, selbst wenn der Dienst aktiviert ist.

Sicher, Sie könnten Ihr default.target bearbeiten zum Hinzufügen oder Löschen von Requires oder Wants Zeilen für alle Dienste, die beim Booten gestartet werden sollen – aber damit Sie einfach eine neue Dienstdatei in das System ziehen und sie standardmäßig zum Laufen bringen können (was die Dinge für Softwarepaketmanager sehr einfach macht), systemd hat den WantedBy und RequiredBy Schlüsselwörter, die zum Einfügen von Wants verwendet werden können und Requires -Typ-Abhängigkeiten (jeweils) vom „anderen Ende“.

Verwandte:Ubuntu – systemd „Socket-Aktivierung“ vs. xinetd?

3.) Sie sollten die Zeile weglassen, wenn Sie nicht möchten, dass der Dienst immer automatisch beim Booten gestartet wird, oder Dieser Dienst ist Teil einer Kette von Abhängigkeiten, die Sie explizit definiert haben.

Beispielsweise könnten Sie die Serveranwendung A umgestalten und aus irgendeinem Grund entscheiden, einige optionale Funktionen davon in einen separaten Dienst B aufzuteilen, um dem Benutzer die Wahl zu lassen, sie nicht zu installieren, wenn sie nicht benötigt wird. Sie könnten dann Service B zu einer separaten service-B.rpm machen , und definieren Sie B.service mit WantedBy=A.service um systemd zu machen Dienst B automatisch starten, wenn Dienst A gestartet wird – aber nur wenn service-B.rpm tatsächlich installiert ist.

Beachten Sie, dass ein Wants oder WantedBy sagt nur, dass das System einen Dienst starten soll, wenn auch ein anderer Dienst oder ein anderes Ziel gestartet wird, aber es gibt überhaupt nichts über die Start-/Herunterfahrreihenfolge an. Wenn Dienst B bereits ausgeführt werden soll, wenn Dienst A gestartet wird, müssen Sie Before=A.service hinzufügen im B.service Datei, um die Abhängigkeit der Startreihenfolge explizit anzugeben.

4.) Jederzeit tun möchten, dass der Dienst beim Booten automatisch gestartet werden kann und keine anderen Abhängigkeiten bereits definiert sind.


Linux
  1. Verwalten Sie den Start mit systemd

  2. Wie stoppen Sie den systemd-Dienst

  3. Systemd-Benutzerdienst vom Systemziel abhängig machen

  4. Wie führe ich ein Skript mit systemd kurz vor dem Herunterfahren aus?

  5. Systemd-Socket-Aktivierung vs. xinetd

Systemctl-Befehle zum Verwalten des Systemd-Dienstes

Verwenden von systemd-Funktionen zum Sichern von Diensten

Verwalten von cgroups mit systemd

systemd-analyze-Befehlsbeispiele unter Linux

systemd - Gibt meinem Dienst mehrere Argumente

Systemd-Abhängigkeiten und Startreihenfolge