Voraussetzungen und Informationen zum Erstellen eigener Unit-Files: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 50: Zeile 50:
 
==Unit==
 
==Unit==
 
*Diese Sektion kommt in der Regel zum Einsatz, um Metadaten für die Einheit zu definieren und die Beziehung der Unit zu anderen Einheiten zu konfigurieren.
 
*Diese Sektion kommt in der Regel zum Einsatz, um Metadaten für die Einheit zu definieren und die Beziehung der Unit zu anderen Einheiten zu konfigurieren.
===[Unit]
+
===Description===
Description=Simple WSGI Server
+
*Beschreibt den Dienst der gestartet werden soll.
 
+
*Den Wert dazu dürfen Sie frei wählen; er sollte aber den Zweck des Dienstes deutlich offenbaren.
[Service]
+
==After enthält die Services und Targets, die dieser Dienst erwartet. Dabei sind Targets in Gruppen zusammengefasste Dienste (Abbildung 5). Dass die in unserem Fall allesamt Funktionen des Netzwerks betreffen, erklärt sich von selbst – schließlich kommen Sie ohne Netzwerk nirgendwo hin, um entfernte Laufwerke einzuhängen.
Type=simple
 
ExecStart=/usr/local/bin/webserver.py
 
ExecStartPost=/bin/echo "Server gestartet"
 
User=www-data
 
 
 
[Install]
 
WantedBy=multi-user.target
 
Der Schlüssel Description beschreibt den Dienst. Den Wert dazu dürfen Sie frei wählen; er sollte aber den Zweck des Dienstes deutlich offenbaren. Der Schlüssel After enthält die Services und Targets, die dieser Dienst erwartet. Dabei sind Targets in Gruppen zusammengefasste Dienste (Abbildung 5). Dass die in unserem Fall allesamt Funktionen des Netzwerks betreffen, erklärt sich von selbst – schließlich kommen Sie ohne Netzwerk nirgendwo hin, um entfernte Laufwerke einzuhängen.
 
  
 
==Service==
 
==Service==

Version vom 9. Januar 2023, 12:21 Uhr

Eigener Service

  • Eigene Services werden in /etc/systemd/system abgelegt, und sind einfache INI-Dateien, in denen die Anweisungen für systemd stehen.
  • Dieses generiert aus der Datei eine Service-Unit, die mittels systemctl verwaltet werden kann.
  • Das Verhalten wird von journald geloggt und kann über journalctl eingesehen werden.

Beispiel

  • Im folgenden wird anhand eines Beispiels gezeigt, wie man eine eigene Service Unit für systemd anlegt und aktiviert.
  • Das Programm, welches ausgeführt werden soll, ist ein simpler, in Python geschriebener Webserver.
  • Dieser machtnichts anderes, als auf localhost und Port 8000 zu lauschen und beim Zugriff "Hello World" und die aktuelle Uhrzeit auszugeben.

Python Script

  • /usr/local/bin/webserver.py
#!/usr/bin/env python3

from wsgiref.simple_server import make_server
from datetime import datetime

def hello_world_app(environ, start_response):
    status = '200 OK'
    headers = [('Content-type', 'text/plain; charset=utf-8')]
    start_response(status, headers)
    text = 'Hello World @ {}'.format(datetime.now())
    return [text.encode('utf-8')]

httpd = make_serve('0.0.0.0', 8000, hello_world_app)
httpd.server_forever()
Diese müssen wir nun ausführbar machen.
  • chmod +x /usr/local/bin/webserver.py

Service File

  • .service Datei anlegen
  • Man muss nun eine .service Datei unter /etc/systemd/system anlegen.
  • cat /etc/systemd/system/webserver.service
[Unit]
Description=Simple WSGI Server

[Service]
Type=simple
ExecStart=/usr/local/bin/webserver.py
ExecStartPost=/bin/echo "Server gestartet"
User=www-data

[Install]
WantedBy=multi-user.target

Erkärung

  • Es gibt 3 Bereiche

Unit

  • Diese Sektion kommt in der Regel zum Einsatz, um Metadaten für die Einheit zu definieren und die Beziehung der Unit zu anderen Einheiten zu konfigurieren.

Description

  • Beschreibt den Dienst der gestartet werden soll.
  • Den Wert dazu dürfen Sie frei wählen; er sollte aber den Zweck des Dienstes deutlich offenbaren.

==After enthält die Services und Targets, die dieser Dienst erwartet. Dabei sind Targets in Gruppen zusammengefasste Dienste (Abbildung 5). Dass die in unserem Fall allesamt Funktionen des Netzwerks betreffen, erklärt sich von selbst – schließlich kommen Sie ohne Netzwerk nirgendwo hin, um entfernte Laufwerke einzuhängen.

Service

Install

Handling

Aktivieren
  • systemctl enable webserver.service
Starten
  • systemctl start webserver.service
Stoppen
  • systemctl stop webserver.service
Status
  • systemctl status webserver.service
Deaktivieren
  • systemctl disable webserver.service