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

Systemd:Sowohl After als auch Requires verwenden

Während Umuts Antwort richtig ist, gibt es eine Interaktion zwischen Requires= und After= das wird selten ausgesprochen. Aus systemd.unit#Requires=(Hervorhebung von mir):

Wenn diese Einheit aktiviert wird, werden die aufgelisteten Einheiten ebenfalls aktiviert. Wenn eine der anderen Einheiten nicht aktiviert werden kann, und eine Ordnungsabhängigkeit After= auf das fehlerhafte Gerät eingestellt ist , wird dieses Gerät nicht gestartet.

Im Wesentlichen bedeutet dies, dass ohne After= , werden beide Dienste gestartet, wenn foo.service gestartet wird (wegen Requires= ), aber systemd stoppt foo.service nicht wenn bar.service startet nicht erfolgreich.

Allerdings mit dem Zusatz After= , es wird auf bar.service gewartet erfolgreich zu starten (mit einigen Ausnahmen; siehe Hinweis im Requires= docs), bevor es foo.service startet und wird es nicht starten, wenn bar.service startet nicht.

Etwas verwandt ist der Unterschied zwischen Requires= und BindsTo= (Siehe die Dokumentation um den Link oben).


Es ist vollkommen in Ordnung, beide After= zu verwenden und Requires= . Sie haben unterschiedliche Zwecke. Requires= richtet eine Startabhängigkeit ein. systemd stellt sicher, dass jeder, der versucht, foo.service zu starten, auch bar.service starten sollte. Sollte bar.service irgendwann ausfallen, wird auch foo.service heruntergefahren.

After= setzt eine Startreihenfolge zwischen den Diensten. Wenn der Start beider Dienste geplant ist, dann After= stellt sicher, dass die Startreihenfolge festgelegt ist.

Als Beispiel können Sie sich die eigene Servicedatei von systemd ansehen.

/lib/systemd/system/basic.target
[Unit]
...
Requires=sysinit.target
After=sysinit.target
...

Linux
  1. Beginnen Sie mit der Verwendung von systemd als Tool zur Fehlerbehebung

  2. Warum stoppt Systemd den Dienst sofort nach dem Start?

  3. Systemd-Dienst startet Nodejs nicht?

  4. Crond Daemon unter Linux starten, stoppen und neu starten

  5. systemd:SIGTERM unmittelbar nach dem Start

Wie ich gelernt habe, mir keine Sorgen mehr zu machen und systemd zu lieben

Verwenden von systemd-Funktionen zum Sichern von Diensten

So richten Sie die automatische Ausführung eines Python-Skripts mit Systemd ein

So starten Sie einen systemd-Dienst nach der Benutzeranmeldung und stoppen ihn vor der Benutzerabmeldung

Das System verweigert SSH und bleibt nach der systemd-Installation beim Hochfahren hängen

Systemd-Unit-Datei - WantedBy und After