Systemd Timer: Moderne Task-Planung | Enjyn Gruppe
Hallo Welt
Hallo Welt
Original Lingva Deutsch
Übersetzung wird vorbereitet...
Dieser Vorgang kann bis zu 60 Sekunden dauern.
Diese Seite wird erstmalig übersetzt und dann für alle Besucher gespeichert.
0%
DE Zurück zu Deutsch
Übersetzung durch Lingva Translate

241 Dokumentationen verfügbar

Wissensdatenbank

Linux Systemd Timer

Zuletzt aktualisiert: 20.01.2026 um 10:04 Uhr

Systemd Timer: Moderne Task-Planung

Systemd Timer sind die moderne Alternative zu Cron. Lernen Sie, wie Sie zeitgesteuerte Aufgaben mit Systemd einrichten.

Timer vs. Cron

Feature Cron Systemd Timer
Logging Manuell Journal integriert
Dependencies Nicht möglich Ja (After=, Requires=)
Verpasste Runs Übersprungen Nachholbar (Persistent=)
Randomisierung Nein Ja (RandomizedDelaySec=)
Resource Limits Nein Ja (cgroups)

Timer erstellen

# 1. Service erstellen
# /etc/systemd/system/backup.service

[Unit]
Description=Daily Backup
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
User=backup
Group=backup

# Optional: Resource Limits
MemoryMax=512M
CPUQuota=50%
# 2. Timer erstellen
# /etc/systemd/system/backup.timer

[Unit]
Description=Run Backup Daily

[Timer]
# Täglich um 3:00 Uhr
OnCalendar=*-*-* 03:00:00

# Verpasste Runs nachholen
Persistent=true

# Zufällige Verzögerung (verhindert Lastspitzen)
RandomizedDelaySec=300

[Install]
WantedBy=timers.target
# 3. Timer aktivieren
sudo systemctl daemon-reload
sudo systemctl enable backup.timer
sudo systemctl start backup.timer

OnCalendar Syntax

# Format: DayOfWeek Year-Month-Day Hour:Minute:Second

# Jeden Tag um 14:30
OnCalendar=*-*-* 14:30:00

# Jeden Montag um 9:00
OnCalendar=Mon *-*-* 09:00:00

# Jeden 1. des Monats
OnCalendar=*-*-01 00:00:00

# Alle 15 Minuten
OnCalendar=*:0/15

# Werktags 9-17 Uhr, jede Stunde
OnCalendar=Mon..Fri *-*-* 09..17:00:00

# Spezielle Shortcuts
OnCalendar=hourly
OnCalendar=daily
OnCalendar=weekly
OnCalendar=monthly

# Validieren
systemd-analyze calendar "Mon *-*-* 09:00:00"

Monotone Timer

# Zeit relativ zu einem Event

[Timer]
# 5 Minuten nach System-Boot
OnBootSec=5min

# 10 Minuten nach Timer-Aktivierung
OnActiveSec=10min

# Alle 2 Stunden (nach letztem Run)
OnUnitActiveSec=2h

# Alle 30 Minuten (nach letztem Start)
OnUnitInactiveSec=30min

# Kombiniert: Boot + wiederholen
OnBootSec=5min
OnUnitActiveSec=1h

Praktische Beispiele

Log-Rotation

# /etc/systemd/system/logrotate.service
[Unit]
Description=Rotate Logs

[Service]
Type=oneshot
ExecStart=/usr/sbin/logrotate /etc/logrotate.conf

# /etc/systemd/system/logrotate.timer
[Unit]
Description=Daily Log Rotation

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

[Install]
WantedBy=timers.target

Datenbank-Cleanup

# /etc/systemd/system/db-cleanup.service
[Unit]
Description=Database Cleanup
Requires=postgresql.service
After=postgresql.service

[Service]
Type=oneshot
ExecStart=/usr/local/bin/cleanup-old-records.sh
User=postgres

# /etc/systemd/system/db-cleanup.timer
[Unit]
Description=Weekly Database Cleanup

[Timer]
OnCalendar=Sun 02:00
Persistent=true

[Install]
WantedBy=timers.target

SSL-Zertifikat erneuern

# /etc/systemd/system/certbot-renew.service
[Unit]
Description=Certbot Renewal

[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew --quiet
ExecStartPost=/bin/systemctl reload nginx

# /etc/systemd/system/certbot-renew.timer
[Unit]
Description=Certbot Renewal Timer

[Timer]
OnCalendar=*-*-* 00,12:00:00
RandomizedDelaySec=43200
Persistent=true

[Install]
WantedBy=timers.target

Timer verwalten

# Alle Timer anzeigen
systemctl list-timers --all

# Timer-Status
systemctl status backup.timer

# Timer manuell triggern (Service starten)
systemctl start backup.service

# Timer-Logs
journalctl -u backup.service
journalctl -u backup.timer

# Nächste Ausführungszeiten
systemctl list-timers

# Timer deaktivieren
systemctl stop backup.timer
systemctl disable backup.timer

Fehlerbehandlung

# /etc/systemd/system/important-task.service
[Unit]
Description=Important Task

[Service]
Type=oneshot
ExecStart=/usr/local/bin/task.sh

# Bei Fehler: Restart versuchen
Restart=on-failure
RestartSec=60

# E-Mail bei Fehler
ExecStopPost=/bin/sh -c 'if [ "$$EXIT_STATUS" != "0" ]; then echo "Task failed" | mail -s "Task Error" admin@example.com; fi'

# Oder: OnFailure Unit
OnFailure=notify-failure@%n.service

User Timer (ohne Root)

# ~/.config/systemd/user/myscript.service
[Unit]
Description=My Script

[Service]
Type=oneshot
ExecStart=%h/bin/myscript.sh

# ~/.config/systemd/user/myscript.timer
[Unit]
Description=Run My Script

[Timer]
OnCalendar=hourly
Persistent=true

[Install]
WantedBy=timers.target

# Aktivieren
systemctl --user daemon-reload
systemctl --user enable myscript.timer
systemctl --user start myscript.timer

# User-Timer nach Boot starten (ohne Login)
loginctl enable-linger username
💡 Tipp: Überwachen Sie Ihre Timer-Jobs mit dem Enjyn Status Monitor und erhalten Sie Alerts bei Fehlern.

Weitere Informationen

Enjix Beta

Enjyn AI Agent

Hallo 👋 Ich bin Enjix — wie kann ich dir helfen?
120