Voraussetzungen und Informationen zum Erstellen eigener Unit-Files

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

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/python3
import sys
from wsgiref.simple_server import make_server
from datetime import datetime
if  sys.argv[1].isnumeric():
   port = sys.argv[1]
else:
   port = 8000
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_server('0.0.0.0', int(port), hello_world_app)
httpd.serve_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 8000
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.

Service

  • Die Service Sektion definierte alles rund um das Programm das gestartet werden soll.

Type

  • Als Erstes definieren Sie dort den Service-Typ.
  • Als Standard gilt hier Type=simple, den Systemd bei Fehlen einer expliziten Angabe annimmt.
  • Er bedeutet, dass der fragliche Dienst nach dem Start nicht verzweigt.

ExecStart

  • Programm welches gestartet werden soll.

ExecStartPost

  • Programm welches nach dem normalen Programm gestartet wird.

User

  • Die Benutzerkennung unter der der Prozess laufen soll.

Install

WantedBy

  • Das Ziel in dem dieser Dienst gestartet werden soll-

Handling

Erweiterung des Service File

  • cat /etc/systemd/system/webserver.service
[Unit]
Description=Simple WSGI Server
After=ssh.service
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/webserver.py
ExecStartPost=/bin/echo "Server gestartet"
User=www-data

[Install]
WantedBy=multi-user.target