In dieser Anleitung zeige ich dir, wie du ein Systemd Startscript unter Linux erstellst. Systemd ist ein init-System und System-Manager, der viele verschiedene Aspekte eines Linux-Systems verwaltet. Um den Start eines eigenen Dienstes unter systemd zu konfigurieren, musst du eine Systemd-Unit-Datei erstellen. Diese Datei enthält die Informationen darüber, wie und wann dein Dienst gestartet, gestoppt und verwaltet wird.
Voraussetzungen
Du benötigst Root-Rechte oder die Fähigkeit, sudo zu verwenden, sowie einen grundlegenden Überblick über die Struktur eines Linux-Systems. Idealerweise hast du bereits eine Shell-Script oder ein Programm, das du beim Start automatisch ausführen möchtest.
Erstellung der Systemd-Unit-Datei
Die Unit-Datei legst du in einem speziellen Verzeichnis ab. Üblicherweise werden benutzerdefinierte Unit-Dateien unter /etc/systemd/system/
gespeichert. Erstelle also zunächst eine neue Datei in diesem Verzeichnis:
sudo nano /etc/systemd/system/dein_dienst.service
In dieser Datei definierst du die Eigenschaften deines Dienstes. Eine einfache Unit-Datei könnte wie folgt aussehen:
[Unit]
Description=Mein Custom Service
After=network.target
[Service]
ExecStart=/usr/local/bin/mein_script.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
Erklärung der Konfigurationsabschnitte
- [Unit]: Enthält generelle Informationen über den Dienst. Das Feld Description bietet eine kurze Beschreibung. Mit After kannst du Abhängigkeiten von anderen Diensten definieren.
- [Service]: Hier gibst du den eigentlichen Startbefehl an. ExecStart definiert, welches Shell-Skript oder Programm ausgeführt wird. Mit Restart stellst du sicher, dass der Dienst bei Fehlern neu gestartet wird.
- [Install]: Diese Sektion gibt an, unter welchen Umständen die Unit-Datei aktiviert wird. WantedBy definiert, dass der Dienst im Multi-User Runlevel gestartet wird.
Für die Option Restart gibt es ein paar Optionen.
- no: Der Dienst wird nicht automatisch neu gestartet.
- always: Der Dienst wird unabhängig davon, wie er beendet wurde, neu gestartet, es sei denn, er wird vom Systemadministrator explizit beendet.
- on-success: Der Dienst wird nur dann neu gestartet, wenn er mit einem erfolgreichen Exit-Status beendet wird.
- on-abnormal: Der Dienst wird neu gestartet, wenn er aufgrund eines Signals oder eines Exit-Codes ungleich Null beendet wird.
- on-abort: Der Dienst wird neu gestartet, wenn er durch ein Signal beendet wird, das nicht abgefangen wurde.
- on-watchdog: Der Dienst wird neu gestartet, wenn er aufgrund einer Watchdog-Zeitüberschreitung beendet wird.
Aktivierung und Verwaltung des Dienstes
Nachdem du die Unit-Datei erstellt hast, musst du den neuen Dienst mit systemctl registrieren und starten. Führe dazu die folgenden Befehle aus:
sudo systemctl daemon-reload
sudo systemctl enable dein_dienst.service
sudo systemctl start dein_dienst.service
Der erste Befehl daemon-reload lädt die geänderten Unit-Dateien erneut. Mit enable konfigurierst du den Dienst so, dass er beim Start des Systems automatisch gestartet wird. Der letzte Befehl start startet den Dienst sofort.
Überprüfung des Dienstes
Um sicherzustellen, dass dein Dienst korrekt läuft, kannst du den Status überprüfen:
sudo systemctl status dein_dienst.service
Falls der Dienst nicht korrekt startet, liefert das Status-Command oft nützliche Informationen zur Fehlerdiagnose. Achte besonders auf Zeilen im Log, die auf Fehler hinweisen.
Weitere nützliche Befehle zum Verwalten deines Dienstes umfassen:
- Stoppen eines laufenden Dienstes:
sudo systemctl stop dein_dienst.service
- Neustarten eines Dienstes:
sudo systemctl restart dein_dienst.service
- Deaktivieren, damit der Dienst beim Systemstart nicht automatisch startet:
sudo systemctl disable dein_dienst.service
Fazit
Das Erstellen eines systemd Startscript ist ein einfacher Prozess, der jedoch starke Auswirkungen auf die Konfiguration und Verwaltung deiner Dienste haben kann. Durch genauen Einsatz der verschiedenen Parameter in der Unit-Datei kannst du sicherstellen, dass dein Dienst genau nach deinen Anforderungen gestartet und verwaltet wird.