So erstellen Sie einen Systemd -Dienst unter Linux

So erstellen Sie einen Systemd -Dienst unter Linux

Systemd ist eine moderne Software -Suite, die viele Komponenten auf einem Linux -System bietet, einschließlich eines Systems und eines Service -Managers. Es ist kompatibel mit Sysv Und LSB Init Skripte und arbeitet als Ersatz für sysvinit.

Ein Systemd -Dienst ist in einer Einheitsdatei definiert (eine Einheit ist eine Darstellung von Dienst- und Systemressourcen wie Geräten, Sockeln, Mountspunkten usw.). Benutzerdefinierte Service -Einheitsdateien sollten in der gespeichert werden /etc/systemd/system/ Verzeichnis und muss eine haben .Service Verlängerung. Zum Beispiel ein Brauch Test-App Service verwendet /etc/systemd/system/test-App.Service Einheitsdatei.

[Möglicherweise mögen Sie auch: Warum 'init' in Linux durch 'systemd' ersetzt werden musste]

Eine Einheitsdatei ist eine klare Textdatei im Stil der INI-Art, die normalerweise drei gemeinsame Abschnitte enthält. Der erste Abschnitt ist normalerweise der Einheit Abschnitt, der generische Informationen über die Einheit enthält, die nicht von der Art der Einheit abhängig ist.

Der nächste Abschnitt ist der Abschnitt Typtyp für einen Dienst, er ist a Service Abschnitt. Und der letzte Abschnitt ist der Installieren Abschnitt, der Installationsinformationen für das Gerät enthält.

In diesem Leitfaden zeigen wir, wie Sie ein neues erstellen können systemd Service und verwalten Sie den Dienst mit dem SystemCTL -Befehl unter Linux.

Erstellen einer benutzerdefinierten Systemd -Dienstdatei unter Linux

Um eine Anwendung oder ein Programm oder ein Skript als Dienst unter Systemd auszuführen, können Sie wie folgt einen neuen SystemD -Dienst erstellen. Beginnen Sie mit dem Erstellen des Dienstes Einheit Datei benannt Test-App.Service (Denken Sie daran zu ersetzen Test-App mit dem tatsächlichen Namen Ihres Dienstes oder Ihrer Anwendung) unter /etc/systemd/system/:

# vi/etc/systemd/system/test-App.Service 

Die folgende Konfiguration wird verwendet, um einen Dienst zum Ausführen von a zu definieren Flasche Anwendung verwendet Gunicorn, Ein Python WSGI HTTP -Server für UNIX.

[Einheit] Beschreibung = Gunicorn-Daemon zum Servieren von Test-Apps nach = Netzwerk.Ziel [Service] user = root Group = root WorkingDirectory =/apps/test-App/Umgebung = "path =/apps/test-App/bin" execstart =/apps/test-App/Bin/Gunicorn-Workers 9- T 0 -Bind 127.0.0.1: 5001 -m 007 WSGI: App-Debug-Log-Level-Access-Logfile/var/log/gunicorn/test_app_access.log-eRror-logfile/var/log/Gunicorn/test_app_error.log execreload =/bin/Kill -s Hup $ mainpid restartSec = 5 [install] suchtby = multi -user.Ziel 

Beschreiben wir kurz jede Konfigurationsrichtlinie in der obigen Konfiguration:

  • Beschreibung - wird verwendet, um eine Beschreibung für den Dienst anzugeben.
  • Nach - definiert eine Beziehung zu einer zweiten Einheit, die Netzwerk.Ziel. In diesem Fall die Test-App.Service wird nach dem aktiviert Netzwerk.Ziel Einheit.
  • Benutzer - wird verwendet, um den Benutzer anzugeben, mit dessen Berechtigungen der Dienst ausgeführt wird.
  • Gruppe - wird verwendet, um die Gruppe anzugeben, mit deren Berechtigungen der Dienst ausgeführt wird.
  • Working Directory - wird verwendet, um das Arbeitsverzeichnis für ausgeführte Prozesse festzulegen.
  • Umfeld - wird verwendet, um Umgebungsvariablen für ausgeführte Prozesse festzulegen.
  • ExecStart - wird verwendet, um die Befehle mit ihren Argumenten zu definieren, die beim Start dieses Dienstes ausgeführt werden.
  • Execreload - wird verwendet, um die Befehle zu definieren, die ausgeführt werden sollen, um eine Konfiguration neu zu laden, im Dienst.
  • Gesucht von - ermöglicht einen symbolischen Link, der in der erstellt werden kann .will/ oder .erfordert/ Verzeichnis jeder der aufgeführten Einheiten (en), Multi-Benutzer.Ziel in diesem Fall, wenn die Test-App.Service Die Einheit wird mit dem aktiviert SystemCTL -Befehl aktivieren.

Sie können alle Konfigurationsparameter für Serviceeinheiten finden, die in der Dokumentation der Serviceeinheit gut beschrieben sind.

Speichern Sie die Einheitsdatei und schließen Sie sie. Laden Sie dann Systemd mit dieser neuen Service -Einheitsdatei neu, indem Sie ausführen:

# Systemctl Dämon-Reload-Befehl 

Denken Sie daran, diesen Befehl immer auszuführen, nachdem Sie eine Einheitsdatei bearbeitet haben.

Verwalten Sie den Systemd Service unter Linux

Führen Sie den Befehl systemctl wie folgt aus:

# Systemctl Start Test-App.Service 

Um zu überprüfen, ob der Dienst ausgeführt wird oder nicht, geben Sie den Befehl systemctl wie gezeigt aus.

# Systemctl Status Test-App.Service 
Überprüfen Sie den Status des Dienstes

Verwenden Sie den Dienst, um den Dienst am Systemstart zu beginnen Systemctl aktivieren Befehl. Sie können prüfen, ob der Dienst mit dem aktiviert wurde SystemCTL ist-enab Befehl wie folgt:

# SystemCTL test-App aktivieren.Service # SystemCTL IS-fähiger Test-App.Service 
Aktivieren Sie den Service, um am Boot zu beginnen

Alternativ können Sie auch den Dienst gleichzeitig wie gezeigt aktivieren und starten.

# SystemCtl Enable-Now Test-App.Service 

Führen Sie den Dienst an, um den Service anzuhalten/zu deaktivieren Systemctl Stopp Befehl wie folgt:

# Systemctl Stop Test-App.Service 

Um den Service neu zu starten, führen Sie die aus SystemCTL Neustart Befehl wie folgt:

# Systemctl Neustart-Test-App.Service 

Sie können auch einen Dienst deaktivieren, um zu verhindern, dass er mit dem S mit dem System startetystemctl deaktivieren Befehl. Sie können prüfen, ob der Dienst mit dem aktiviert wurde SystemCTL ist-enab Befehl wie folgt:

# Systemctl Deaktivieren Sie die Test-App.Service # SystemCTL ist ein Behinderungstest-App.Service 

Alternativ können Sie es deaktivieren und gleichzeitig wie gezeigt stoppen.

# Systemctl Deaktivieren-Now Test-App.Service 

Weitere Informationen zum Verwalten von Systemd -Diensten und anderen Ressourcen finden Sie aus:

# MAN SYSTEMCTL