Systemd Services Erstellen Anleitung
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
- 📖 Systemd Dokumentation
- 📧 E-Mail: support@enjyn.de