systemd Service erstellen
systemd Service erstellen: Unit-Datei für Ihren Linux-Dienst mit Neustart-Regel, Benutzer, Umgebungsvariablen und Härtung, dazu die Befehle zum Aktivieren.
Alles läuft in Ihrem Browser. Eingaben verlassen Ihr Gerät nicht.
Dienste mit systemd betreiben
Mit dem Generator können Sie einen systemd Service erstellen, also eine Unit-Datei, mit der Linux ein Programm als Dienst verwaltet. systemd startet den Dienst beim Booten, startet ihn nach einem Absturz neu, sammelt seine Ausgabe im Journal und stoppt ihn sauber beim Herunterfahren. Eine systemd Unit-Datei besteht aus drei Abschnitten: [Unit] mit Beschreibung und Abhängigkeiten, [Service] mit Befehl, Nutzer und Neustart-Regeln und [Install], das festlegt, wann der Dienst beim Aktivieren mitgestartet wird.
Wer einen Linux-Dienst einrichten will, braucht meist nur wenige Zeilen: ExecStart mit dem vollständigen Befehl, User für ein Konto ohne root-Rechte und Restart=on-failure, damit der Dienst nach einem Fehler neu startet, aber nicht nach einem gewollten Beenden. Damit der Dienst automatisch starten kann, wird er mit systemctl enable an multi-user.target gehängt; --now startet ihn zugleich. Der Typ simple passt für Programme, die im Vordergrund laufen, was bei Node.js, Python-Servern und Go fast immer der Fall ist. forking ist nur für ältere Daemons gedacht, die sich selbst in den Hintergrund schicken.
Die Härtung schränkt ein, was der Dienst darf: ProtectSystem=strict macht das Dateisystem schreibgeschützt, außer den unter ReadWritePaths genannten Pfaden; ProtectHome sperrt die Home-Verzeichnisse, PrivateTmp gibt ein eigenes /tmp, NoNewPrivileges verhindert Rechteausweitung. Mit systemd-analyze security name.service sehen Sie anschließend eine Bewertung. Prozentzeichen in Werten verdoppelt der Generator, weil systemd sie sonst als Platzhalter liest. Für zeitgesteuerte Aufgaben ist ein Timer oder ein Eintrag aus dem Cron-Generator die bessere Wahl.
Anleitung: systemd Service erstellen in 4 Schritten
- „Dienstname“, „Beschreibung“ und den vollständigen Befehl unter „ExecStart“ eintragen.
- „Arbeitsverzeichnis“, „Benutzer“ und „Gruppe“ festlegen und unter „Typ“ das Startverhalten wählen.
- Neustart-Regel, Wartezeit und Umgebungsvariablen angeben; bei Bedarf die Härtung einschalten.
- Unit-Datei kopieren und die Befehle unter „Installieren und starten“ der Reihe nach ausführen.
Typische Anwendungsfälle
- Eine Node.js-, Python- oder Go-Anwendung auf einem Server dauerhaft betreiben, mit Neustart nach Absturz und Start beim Booten.
- Skripte wie Backups oder Migrationen als
oneshot-Dienst ausführen und ihre Ausgabe im Journal sammeln. - Dienste unter einem eigenen Benutzer ohne root-Rechte laufen lassen und mit Sandbox-Optionen absichern.
- Persönliche Dienste ohne Administratorrechte als Benutzer-Unit unter
~/.config/systemd/user/einrichten.
Häufige Fragen
Wo speichere ich die Unit-Datei?
Eigene Systemdienste gehören nach /etc/systemd/system/name.service. Das Verzeichnis /lib/systemd/system bzw. /usr/lib/systemd/system ist für Pakete der Distribution reserviert. Benutzerdienste liegen in ~/.config/systemd/user/.
Warum wird meine Änderung an der Unit nicht übernommen?
Nach jeder Änderung an der Datei muss systemd sie neu einlesen: sudo systemctl daemon-reload, danach sudo systemctl restart name.service.
Was ist der Unterschied zwischen enable und start?
start startet den Dienst jetzt, enable sorgt dafür, dass er bei jedem Systemstart mitläuft. enable --now erledigt beides.
Mein Dienst startet nach einigen Abstürzen nicht mehr. Warum?
systemd begrenzt Neustarts: Standardmäßig sind fünf Starts in zehn Sekunden erlaubt, danach bleibt der Dienst im Fehlerzustand. Der Generator setzt StartLimitIntervalSec und StartLimitBurst sichtbar; mit systemctl reset-failed heben Sie die Sperre auf.
Laufen Benutzerdienste auch ohne Anmeldung?
Nur wenn für den Nutzer „Linger“ aktiviert ist: loginctl enable-linger nutzername. Sonst startet systemd sie erst bei der Anmeldung und beendet sie beim Abmelden.
Wo sehe ich die Ausgaben meines Dienstes?
Alles, was der Dienst auf stdout und stderr schreibt, landet im Journal. Mit journalctl -u name.service -f verfolgen Sie es live, mit --since "1 hour ago" grenzen Sie den Zeitraum ein.
Wie lasse ich einen Dienst regelmäßig laufen statt dauerhaft?
Dafür gibt es systemd-Timer: eine .timer-Unit mit OnCalendar=, die einen oneshot-Dienst gleichen Namens startet. Das ist die systemd-Alternative zu Cron.
Das könnte auch helfen
Cron-Ausdruck erklären
Crontab-Zeilen mit 5 oder 6 Feldern auf Deutsch erklärt, mit den nächsten 10 Ausführungen.
ÖffnenCron-Generator
Zeitplan im Formular wählen und die fertige Crontab-Zeile kopieren.
ÖffnenUnix-Zeitstempel umrechnen
Timestamp in Datum und zurück, Sekunden und Millisekunden erkannt, UTC und Berlin.
ÖffnenUUID-Generator
UUID v4 und v7 erzeugen, bis zu 1.000 auf einmal, und vorhandene UUIDs prüfen.
ÖffnenULID-Generator
Sortierbare IDs in Crockford Base32 erzeugen, dekodieren und in UUID umwandeln.
ÖffnenTexte vergleichen (Diff)
Unterschiede zwischen zwei Texten zeilen-, wort- oder zeichenweise finden.
Öffnen