Linuxguide

systemd Dienste und Timer – Linux-Services richtig verwalten 2025

Eigene Dienste als systemd Units anlegen und automatisch starten

S
SeeColors IT
11. Juni 20264 Min. Lesezeit166 Aufrufe

Eigenen systemd Service erstellen

# Beispiel: Node.js-App als Dienst

cat > /etc/systemd/system/meine-app.service << 'EOF'
[Unit]
Description=Meine Node.js Anwendung
Documentation=https://github.com/firma/meine-app
After=network.target network-online.target
Requires=network-online.target

[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/opt/meine-app
ExecStart=/usr/bin/node /opt/meine-app/server.js
Restart=on-failure
RestartSec=5s
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=meine-app
Environment=NODE_ENV=production
Environment=PORT=3000
EnvironmentFile=/opt/meine-app/.env

# Security-Härtung
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=full
ProtectHome=yes
ReadWritePaths=/opt/meine-app/data /var/log/meine-app

[Install]
WantedBy=multi-user.target
EOF

# Dienst aktivieren
systemctl daemon-reload
systemctl enable --now meine-app
systemctl status meine-app

Dienst verwalten

# Start/Stop/Restart
systemctl start meine-app
systemctl stop meine-app
systemctl restart meine-app
systemctl reload meine-app  # Konfiguration neu laden (ohne Neustart)

# Autostart an/aus
systemctl enable meine-app   # Nach Reboot automatisch starten
systemctl disable meine-app  # Nicht automatisch starten

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

# Dienste anzeigen
systemctl list-units --type=service --state=running

journalctl – Logs lesen

# Aktuelle Logs
journalctl -u meine-app -f  # Follow (live)

# Letzte 100 Einträge
journalctl -u meine-app -n 100

# Zeitraum
journalctl -u meine-app --since "1 hour ago"
journalctl -u meine-app --since "2025-06-10" --until "2025-06-11"

# Alle Fehler des letzten Boots
journalctl -b -p err

# Kernel-Nachrichten
journalctl -k --since "today"

# Log-Größe
journalctl --disk-usage

# Alte Logs löschen (älter als 30 Tage)
journalctl --vacuum-time=30d

systemd Timer (Cron-Ersatz)

# Service-Unit
cat > /etc/systemd/system/backup.service << 'EOF'
[Unit]
Description=Tägliches Backup
After=network.target

[Service]
Type=oneshot
User=backup
ExecStart=/opt/scripts/backup.sh
StandardOutput=journal
EOF

# Timer-Unit
cat > /etc/systemd/system/backup.timer << 'EOF'
[Unit]
Description=Tägliches Backup Timer
Requires=backup.service

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

[Install]
WantedBy=timers.target
EOF

systemctl daemon-reload
systemctl enable --now backup.timer

# Timer anzeigen
systemctl list-timers --all

Socket Activation

# Service nur starten wenn Verbindung eingeht
cat > /etc/systemd/system/mein-socket-service.socket << 'EOF'
[Unit]
Description=Mein Socket-Dienst

[Socket]
ListenStream=9000

[Install]
WantedBy=sockets.target
EOF

Service-Einheiten debuggen

# Warum startet ein Dienst nicht?
systemctl status meine-app --no-pager -l
journalctl -u meine-app --no-pager -n 50

# Service-Unit validieren
systemd-analyze verify /etc/systemd/system/meine-app.service

# Boot-Zeit analysieren
systemd-analyze blame | head -20
systemd-analyze critical-chain

FAQ

Was ist der Unterschied zwischen Restart=on-failure und Restart=always?
on-failure: Neustart nur bei Fehler-Exitcode (nicht bei SIGTERM/systemctl stop). always: immer neu starten auch nach normalem Beenden.

Fazit

systemd Service Units sind der moderne Standard für Linux-Daemon-Management. Timer ersetzen Cron zuverlässiger mit Logging und Fehlerbehandlung.

Linux-Administration für KMU in Heidelberg, Mannheim und der Rhein-Neckar-Region. Beratung anfragen.

Artikel teilen

War dieser Artikel hilfreich?

Dein Feedback hilft uns, bessere Inhalte zu erstellen.

Kommentar hinterlassen

Verwandte Artikel