Beide führen etwas nach Zeitplan aus. Der Unterschied zeigt sich, wenn ein Job scheitert, wenn ein Job lange läuft oder wenn die Maschine genau dann aus war, als er fällig wurde.

Cron und seine zwei Fallen

crontab -e
# m h dom mon dow  command
15 3 * * *  /usr/bin/php /var/www/site/cron.php >> /var/log/site-cron.log 2>&1
  • Die Umgebung ist fast leer. PATH ist minimal und Ihr Shell-Profil wird nicht gelesen — ein Befehl, der beim Tippen funktioniert, scheitert hier. Verwenden Sie absolute Pfade.
  • Die Ausgabe ist Mail, kein Protokoll. Ohne die Umleitung oben landet sie in einem lokalen Postfach, das niemand liest, und der Job wirkt, als sei er stillschweigend durchgelaufen.

Wenn ein Cronjob überhaupt nie zu laufen scheint, deckt die Liste in Cronjobs, die nie laufen den Rest ab.

Ein Timer und was er hinzufügt

# /etc/systemd/system/site-cron.service
[Unit]
Description=Site maintenance

[Service]
Type=oneshot
User=www-data
WorkingDirectory=/var/www/site
ExecStart=/usr/bin/php cron.php
# /etc/systemd/system/site-cron.timer
[Unit]
Description=Run site maintenance nightly

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

[Install]
WantedBy=timers.target
sudo systemctl daemon-reload
sudo systemctl enable --now site-cron.timer
systemctl list-timers --all
journalctl -u site-cron -n 50

Was der Timer Ihnen gibt

  • Protokolle im Journal, mit dem Rückgabewert, pro Lauf.
  • Keine Überlappung — ein Lauf, der noch arbeitet, wenn der nächste fällig wird, startet keine zweite Kopie.
  • Persistent=true — ein Lauf, der bei ausgeschalteter Maschine ausfiel, findet beim nächsten Start statt.
  • RandomizedDelaySec — eine Flotte von Servern trifft nicht geschlossen um exakt 03:15:00 dieselbe API.

Was nehmen

Ein einzeiliger Job auf einer Maschine: Cron, und denken Sie nicht zu lange nach. Alles, dessen Verlauf Sie sehen müssen, alles, was nicht zweimal laufen darf, und alles, was zählt, wenn es ausfällt: ein Timer.

Planen Sie denselben Job nicht in beiden. Das ist ein häufiges Ergebnis einer halb vollzogenen Umstellung, und es verdoppelt jeden Lauf — auch die, die Mail versenden oder Karten belasten.