LINUX / BASH

Cron verstehen – endlich mal richtig

Cron ist eines dieser Tools das jeder benutzt und kaum jemand wirklich versteht. Man kopiert Beispiele, man probiert aus, man wartet ob's klappt. Das ist kein guter Ansatz wenn der Cron-Job täglich Datenbankbackups macht.

Die fünf Felder

Ein Cron-Eintrag hat fünf Zeitfelder, dann den Befehl:

# Minute Stunde Tag(Monat) Monat Tag(Woche) Befehl * * * * * /pfad/zum/skript.sh # Jeden Tag um 3:30 Uhr 30 3 * * * /backup.sh # Jeden Montag um Mitternacht 0 0 * * 1 /wochenbericht.sh # Jede Stunde zur vollen Stunde 0 * * * * /stundlich.sh

Der häufigste Fehler

* * * * * läuft jede Minute. 0 * * * * läuft jede Stunde. Wer * 3 * * * schreibt meint "jede Minute zwischen 3:00 und 3:59 Uhr" – meistens nicht das was man will.

Warum Cron-Jobs nicht laufen obwohl sie sollten

Der häufigste Grund: der PATH ist in Cron-Jobs anders als in der Shell. Wenn du in der Shell php script.php tippst und es funktioniert, kann der gleiche Befehl im Crontab scheitern weil php nicht im PATH von Cron ist. Lösung: absoluten Pfad benutzen: /usr/bin/php /pfad/script.php.

Output immer irgendwohin schreiben oder explizit verwerfen:

# Output und Fehler in Logfile 0 3 * * * /backup.sh >> /var/log/backup.log 2>&1 # Alles verwerfen wenn wirklich niemand wissen will was passiert 0 3 * * * /backup.sh > /dev/null 2>&1

Und: nach dem Bearbeiten mit crontab -e gibt's keine Bestätigung dass der Cron-Daemon den neuen Job übernommen hat. Das passiert automatisch – aber es passiert. Einfach kurz warten und im Log nachschauen.


← zurück zu Linux   📂 Archiv