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.

Unit-Datei
Installieren und starten

    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

    1. „Dienstname“, „Beschreibung“ und den vollständigen Befehl unter „ExecStart“ eintragen.
    2. „Arbeitsverzeichnis“, „Benutzer“ und „Gruppe“ festlegen und unter „Typ“ das Startverhalten wählen.
    3. Neustart-Regel, Wartezeit und Umgebungsvariablen angeben; bei Bedarf die Härtung einschalten.
    4. 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.
    Fragen

    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.

    Weitere Werkzeuge

    Das könnte auch helfen

    Alle 558 Werkzeuge