Skip to content
Zurück zum Blogsystemd meistern: Timer, Services und das Journal
linux systemd timer journal services cron

systemd meistern: Timer, Services und das Journal

18. Oktober 2026~2 min read· Tobias Weiss

systemd ist der Standard-Init-Prozess auf fast allen modernen Linux-Distributionen. Aber die meisten Administratoren nutzen nur einen Bruchteil seiner Möglichkeiten. Dieser Artikel zeigt, was systemd wirklich kann: Timer als cron-Ersatz, das Journal als zentrale Logging-Lösung, und Service-Management mit Abhängigkeiten.

Services verwalten

# Grundlegende Service-Befehle
systemctl start nginx          # Starten
systemctl stop nginx           # Stoppen
systemctl restart nginx        # Neustart
systemctl reload nginx         # Konfiguration neu laden (ohne Neustart)
systemctl status nginx         # Status
systemctl enable nginx         # Autostart beim Booten
systemctl disable nginx        # Autostart entfernen
systemctl is-enabled nginx     # Ist Autostart aktiv?
systemctl is-active nginx      # Läuft der Service?

# Alle Services anzeigen
systemctl list-units --type=service           # Aktive Services
systemctl list-units --type=service --all     # Alle (auch inaktive)
systemctl list-unit-files --type=service      # Installierte Services
systemctl list-units --state=failed           # Fehlgeschlagene Services

enable vs. start — der häufigste Anfängerfehler

  • systemctl enable sorgt dafür, dass ein Service beim Booten startet. Es startet den Service nicht sofort.
  • systemctl start startet den Service jetzt, aber er startet beim nächsten Booten nicht automatisch.

Um beides zu tun: systemctl enable --now nginx (aktiviert Autostart und startet sofort).

Eigene Service-Units schreiben

# /etc/systemd/system/myapp.service
[Unit]
Description=My Application
After=network.target
Wants=network.target

[Service]
Type=simple
User=myapp
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/bin/myapp --config /etc/myapp/config.yaml
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5s
Environment=NODE_ENV=production
Environment=API_KEY_FILE=/etc/myapp/api-key

[Install]
WantedBy=multi-user.target
# Nach Änderungen:
systemctl daemon-reload        # systemd neu laden
systemctl enable --now myapp   # Aktivieren und starten
systemctl status myapp         # Status prüfen
journalctl -u myapp -f         # Logs folgen

Timer: Der cron-Ersatz

systemd-Timer sind ein moderner Ersatz für cron. Sie bieten Abhängigkeiten, Fallback-Verhalten und bessere Logs.

# /etc/systemd/system/backup.service
[Unit]
Description=Daily Backup

[Service]
Type=oneshot
ExecStart=/opt/backup/backup.sh
# /etc/systemd/system/backup.timer
[Unit]
Description=Run backup daily

[Timer]
OnCalendar=daily
Persistent=true
AccuracySec=1m

[Install]
WantedBy=timers.target
# Timer aktivieren
systemctl enable --now backup.timer
systemctl list-timers             # Alle Timer anzeigen
systemctl status backup.timer     # Timer-Status
journalctl -u backup.service      # Backup-Logs

Timer vs. cron: Die Vorteile

Eigenschaftcronsystemd-Timer
AbhängigkeitenNeinJa (After=, Wants=)
LogsEigenes Loggingjournalctl (zentral)
Fallback bei FehlerNeinJa (Restart=, OnFailure=)
Anacron (versäumte Jobs nachholen)Separate SoftwarePersistent=true
PräzisionMinutengenauSekundengenau (AccuracySec)
Resource ControlNeinJa (CPUQuota=, MemoryLimit=)

Der Hauptvorteil: Timer sind in systemd integriert. Logs landen im Journal, Abhängigkeiten werden respektiert, und versäumte Jobs (z. B. weil der Server nachts aus war) werden mit Persistent=true nachgeholt.

Das Journal: zentrale Logging-Lösung

# Grundlegende Abfragen
journalctl                         # Alle Logs
journalctl -b                      # Nur aktueller Boot
journalctl -u nginx                # Nur ein Service
journalctl --since "1 hour ago"    # Zeitraum
journalctl --since today --until "12:00"
journalctl -p err                  # Nur Fehler (und schlimmer)
journalctl -p warning              # Warnungen und Fehler
journalctl -f                      # Folgen (wie tail -f)
journalctl -n 50                   # Letzte 50 Einträge

# Erweiterte Filter
journalctl -u nginx -u sshd        # Mehrere Services
journalctl _PID=1234               # Nach PID
journalctl _UID=1000               # Nach User-ID
journalctl -g "error"              # Volltext-Suche (grep)
journalctl --disk-usage            # Journal-Größe
journalctl --vacuum-size=500M      # Journal auf 500 MB begrenzen
journalctl --vacuum-time=7d        # Logs älter als 7 Tage löschen

Resource Control mit cgroups

systemd nutzt cgroups (Control Groups) für Resource Control:

# CPU-Limit für einen Service
systemctl set-property myapp.service CPUQuota=50%

# Memory-Limit
systemctl set-property myapp.service MemoryLimit=512M

# In der Unit-Datei:
[Service]
CPUQuota=50%
MemoryLimit=512M
IOWeight=100

Ins Thema einsteigen

Bereit, zu üben? Starte mit den kostenlosen LPI Übungsfragen.

Verwandte Artikel

This site uses essential cookies for Stripe payments. No tracking cookies.