78 Dokumentationen verfügbar

Wissensdatenbank

Systemd Services Erstellen Anleitung

Zuletzt aktualisiert: 11.01.2026 um 11:53 Uhr

Systemd Services erstellen

Systemd ist das Standard-Init-System moderner Linux-Distributionen. Mit eigenen Service-Units können Sie Anwendungen als Hintergrund-Dienste betreiben, automatisch starten und überwachen.

Grundlagen

# Service-Status prüfen
sudo systemctl status nginx

# Service starten/stoppen
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx

# Autostart aktivieren/deaktivieren
sudo systemctl enable nginx
sudo systemctl disable nginx

# Alle Services anzeigen
sudo systemctl list-units --type=service

Eigenen Service erstellen

Service-Datei anlegen

sudo nano /etc/systemd/system/meine-app.service

Einfaches Beispiel

[Unit]
Description=Meine Node.js Anwendung
After=network.target

[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/meine-app
ExecStart=/usr/bin/node server.js
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

Service aktivieren

# Systemd neu laden
sudo systemctl daemon-reload

# Service starten
sudo systemctl start meine-app

# Autostart aktivieren
sudo systemctl enable meine-app

# Status prüfen
sudo systemctl status meine-app

Service-Typen

Type Beschreibung Anwendung
simple Hauptprozess startet direkt Node.js, Python-Apps
forking Prozess forkt sich Klassische Daemons
oneshot Einmalige Ausführung Skripte, Initialisierung
notify Sendet Bereit-Signal Moderne Dienste

Erweiterte Beispiele

Python/Gunicorn App

[Unit]
Description=Gunicorn Django App
After=network.target

[Service]
Type=notify
User=www-data
Group=www-data
WorkingDirectory=/var/www/django-app
Environment="PATH=/var/www/django-app/venv/bin"
ExecStart=/var/www/django-app/venv/bin/gunicorn \
    --workers 3 \
    --bind unix:/run/gunicorn.sock \
    myproject.wsgi:application
ExecReload=/bin/kill -s HUP $MAINPID
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

Docker Container

[Unit]
Description=Docker Container für App
Requires=docker.service
After=docker.service

[Service]
Type=simple
Restart=always
RestartSec=10
ExecStartPre=-/usr/bin/docker stop app-container
ExecStartPre=-/usr/bin/docker rm app-container
ExecStart=/usr/bin/docker run --name app-container -p 8080:80 myapp:latest
ExecStop=/usr/bin/docker stop app-container

[Install]
WantedBy=multi-user.target

Mit Umgebungsvariablen

[Service]
# Einzelne Variablen
Environment="NODE_ENV=production"
Environment="PORT=3000"

# Oder aus Datei
EnvironmentFile=/etc/meine-app/env

Restart-Optionen

[Service]
Restart=always           # Immer neustarten
Restart=on-failure       # Nur bei Fehler
Restart=on-abnormal      # Bei Signal/Timeout
Restart=no               # Nie (Standard)

RestartSec=10            # Wartezeit vor Restart
StartLimitBurst=5        # Max. Restarts
StartLimitIntervalSec=60 # ...in diesem Zeitraum

Timer (Cron-Alternative)

# /etc/systemd/system/backup.timer
[Unit]
Description=Täglicher Backup Timer

[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true

[Install]
WantedBy=timers.target
# /etc/systemd/system/backup.service
[Unit]
Description=Backup Script

[Service]
Type=oneshot
ExecStart=/opt/scripts/backup.sh
sudo systemctl enable backup.timer
sudo systemctl start backup.timer
sudo systemctl list-timers

Logs anzeigen

# Logs eines Services
sudo journalctl -u meine-app

# Live-Logs
sudo journalctl -u meine-app -f

# Logs seit letztem Boot
sudo journalctl -u meine-app -b

# Letzte 100 Zeilen
sudo journalctl -u meine-app -n 100

Troubleshooting

# Detaillierte Fehlermeldung
sudo systemctl status meine-app -l

# Service-Konfiguration prüfen
sudo systemd-analyze verify meine-app.service

# Abhängigkeiten anzeigen
sudo systemctl list-dependencies meine-app

Weitere Hilfe