systemd Timer - der modernere Cronjob

systemd Timer sind der Nachfolger von Cron auf modernen Linux-Systemen.
Besser ins Logging integriert, abhängigkeitsfähig und einfacher zu debuggen.

Aufbau: zwei Dateien

Für jeden Timer braucht man eine .service- und eine .timer-Datei.

sudo nano /etc/systemd/system/backup.service
[Unit]
Description=Tägliches Datenbank-Backup

[Service]
Type=oneshot
User=root
ExecStart=/usr/local/bin/mysql-backup.sh
sudo nano /etc/systemd/system/backup.timer
[Unit]
Description=Backup täglich um 3 Uhr

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

[Install]
WantedBy=timers.target

Persistent=true holt verpasste Ausführungen nach wenn der Server während des geplanten Zeitpunkts aus war.

Aktivieren

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

Alle aktiven Timer anzeigen

systemctl list-timers

Zeigt nächste Ausführungszeit und wann zuletzt gelaufen.

Timer-Syntax

OnCalendar=daily               # täglich um Mitternacht
OnCalendar=weekly              # montags um Mitternacht
OnCalendar=Mon *-*-* 08:00:00  # montags um 8 Uhr
OnCalendar=*:0/15              # alle 15 Minuten
OnBootSec=5min                 # 5 Minuten nach dem Boot
OnUnitActiveSec=1h             # 1 Stunde nach letzter Ausführung

Logs

journalctl -u backup.service

Der größte Vorteil gegenüber Cron: die Ausgabe landet automatisch im Journal und ist mit journalctl abrufbar.