Systemd: Benötigt vs will

15

Gibt es einen Unterschied zwischen Requires und Wants in Zieldateien?

[Unit]
Description=Graphical Interface 
Documentation=man:systemd.special(7)
Requires=multi-user.target
Wants=display-manager.service

Vielen Dank

Iewicz
quelle
2
Sieheman systemd.unit
heemayl

Antworten:

11

Wie Heemayl im Kommentar angemerkt hat, beantwortet die Manpage Ihre Frage. Aus dem Web:

Möchte =

Eine schwächere Version von Requires =. In dieser Option aufgeführte Einheiten werden gestartet, wenn die konfigurierende Einheit ist. Wenn die aufgelisteten Einheiten jedoch nicht gestartet werden können oder nicht zur Transaktion hinzugefügt werden können, hat dies keine Auswirkungen auf die Gültigkeit der gesamten Transaktion. Dies ist die empfohlene Methode, um den Start einer Einheit mit dem Start einer anderen Einheit zu verbinden.

Und Benötigt =:

Konfiguriert Anforderungsabhängigkeiten von anderen Einheiten. Wenn dieses Gerät aktiviert wird, werden auch die hier aufgeführten Geräte aktiviert. Wenn eine der anderen Einheiten deaktiviert wird oder die Aktivierung fehlschlägt, wird diese Einheit deaktiviert. Diese Option kann mehrmals angegeben werden, oder es können mehrere durch Leerzeichen getrennte Einheiten in einer Option angegeben werden. In diesem Fall werden Anforderungsabhängigkeiten für alle aufgelisteten Namen erstellt. Beachten Sie, dass Anforderungsabhängigkeiten keinen Einfluss auf die Reihenfolge haben, in der Dienste gestartet oder gestoppt werden. Dies muss unabhängig mit den Optionen After = oder Before = konfiguriert werden. Wenn eine Einheit foo.service eine mit Requires = konfigurierte Einheit bar.service benötigt und keine Bestellung mit After = oder Before = konfiguriert ist, werden beide Einheiten gleichzeitig und ohne Verzögerung zwischen ihnen gestartet, wenn foo.service aktiviert ist. Häufig,

Beachten Sie, dass dieser Abhängigkeitstyp nicht impliziert, dass die andere Einheit immer im aktiven Zustand sein muss, wenn diese Einheit ausgeführt wird. Insbesondere: Fehlgeschlagene Bedingungsprüfungen (z. B. ConditionPathExists =, ConditionPathExists =,… - siehe unten) führen nicht zum Fehlschlagen des Startjobs einer Einheit mit der Abhängigkeit Requires =. Einige Einheitentypen werden möglicherweise auch selbst deaktiviert (z. B. wird ein Dienstprozess möglicherweise ordnungsgemäß beendet oder ein Gerät wird möglicherweise vom Benutzer getrennt), was nicht an Einheiten mit der Abhängigkeit Requires = weitergegeben wird. Verwenden Sie den Abhängigkeitstyp BindsTo = zusammen mit After =, um sicherzustellen, dass eine Einheit niemals im aktiven Zustand ist, ohne dass eine bestimmte andere Einheit ebenfalls im aktiven Zustand ist (siehe unten).

Von der freedesktop.org Seite

Ihr Dienst wird nur gestartet, wenn das Ziel multi-user.target erreicht wurde (ich weiß nicht, was passiert, wenn Sie versuchen, es diesem Ziel hinzuzufügen?), Und systemd wird versuchen, den Dienst display-manager.service vor Ihrem Dienst zu starten . Wenn display-manager.service aus irgendeinem Grund fehlschlägt, wird Ihr Dienst trotzdem gestartet (wenn Sie also den display-manager wirklich benötigen, verwenden Sie ihn Requires=dafür). Wird das multi-user.target jedoch nicht erreicht, wird Ihr Dienst nicht gestartet.

Was ist Ihr Service? Ist es ein Kiosksystem? Intuitiv würde ich annehmen, dass Sie Ihren Dienst zum multi-user.target hinzufügen möchten (so dass er beim Start gestartet wird), und dass er streng vom display-manager.service über abhängtRequires=display-manager.service . Aber das ist jetzt nur wildes Raten.

ArchimedesMP
quelle
1

Unsere Serverbereitstellung verwendet LDAP mit allen Benutzer-IDs und Automount-Zuordnungen. Benutzer-Ausgangsverzeichnisse sind NFS-gemountet, und die Benutzer erstellen in der Regel @reboot-Cronjobs mit dem ausführbaren Code in ihren Ausgangsverzeichnissen. Wir benutzen auch sssd für den Cache. Es ist unnötig zu erwähnen, dass wir sehr darauf vertrauen, dass wir eine deterministische Startreihenfolge bereitstellen können, damit diese Konfiguration funktioniert. Wir haben eine sehr prägnante Systemkonfiguration entwickelt und eine dunkle Nuance zwischen den Abschnittsoptionen "Gesucht" und "Benötigt" entdeckt.

Wenn ein Dienst während des Startvorgangs ausfällt und ein anderer Dienst mit der Option "restart = always" (Neustart = immer) als Dienst erforderlich ist, wird dieser abhängige Dienst nicht neu gestartet. Wenn Sie jedoch die Option "Wollen" haben, wird der abhängige Dienst wie erwartet neu gestartet.

billq
quelle