Zum Hauptinhalt springen
S-EDV news

Cron-Tester

Cron-Ausdruck eingeben und sofort sehen, was er bedeutet und wann er das nächste Mal läuft – inklusive Umrechnung in einen systemd-Timer.

  • Läuft komplett in Ihrem Browser
  • Keine Daten an einen Server
  • Ohne Anmeldung, ohne Tracking

Cron-Ausdruck

Eine ganze crontab-Zeile mit Befehl dürfen Sie ebenfalls einfügen – der Befehl landet unten im Feld „Befehl“.

Minute –
Stunde –
Tag –
Monat –
Wochentag –

Vorlagen

Nächste 10 Ausführungen

crontab-Zeile

systemd-Timer


          

So ist ein Cron-Ausdruck aufgebaut

Eine Zeile in der crontab besteht aus fünf Zeitfeldern und dem Befehl. cron prüft jede Minute, ob die aktuelle Uhrzeit zu allen Feldern passt, und startet dann den Befehl. Die Felder stehen immer in derselben Reihenfolge:

FeldErlaubte WerteBeispiel
Minute0–5930 = zur Minute 30
Stunde0–239-17 = von 9 bis 17 Uhr
Tag des Monats1–311,15 = am 1. und 15.
Monat1–12 oder JAN–DEC*/3 = Januar, April, Juli, Oktober
Wochentag0–7 oder SUN–SAT (0 und 7 = Sonntag)1-5 = Montag bis Freitag

Ein * steht für „jeder Wert“, das Komma trennt Listen, der Bindestrich bildet Bereiche und der Schrägstrich Schritte: */15 in der Minute bedeutet 0, 15, 30 und 45. 5/15 heißt „ab Minute 5 alle 15 Minuten“, also 5, 20, 35 und 50. Diese Kurzform verstehen nicht alle cron-Varianten – eindeutig ist 5-59/15. Schritte beginnen in jeder Stunde, an jedem Tag und in jedem Monat neu: Bei */7 folgt auf Minute 56 die Minute 0 der nächsten Stunde.

Kurzformen und die Falle mit Tag und Wochentag

KurzformentsprichtBedeutung
@hourly0 * * * *stündlich zur vollen Stunde
@daily, @midnight0 0 * * *täglich um Mitternacht
@weekly0 0 * * 0sonntags um Mitternacht
@monthly0 0 1 * *am 1. jedes Monats
@yearly, @annually0 0 1 1 *am 1. Januar
@reboot–einmal beim Start des cron-Dienstes

Die häufigste Überraschung betrifft Tag und Wochentag. Sind beide Felder eingeschränkt und beginnt keines mit *, verknüpft cron sie mit ODER. 0 8 1-7 * 1 läuft deshalb nicht nur am ersten Montag im Monat, sondern an den Tagen 1 bis 7 und an jedem Montag. Für „erster Montag“ prüfen Sie den Wochentag im Befehl:

0 8 1-7 * * [ "$(date +\%u)" -eq 1 ] && /usr/local/bin/bericht.sh

Beginnt eines der beiden Felder mit * – auch */2 –, müssen beide passen. Das Tool zeigt oben an, welche Regel für Ihren Ausdruck gilt.

Praxistipps für zuverlässige Cronjobs

  • Absolute Pfade: cron startet Befehle mit einer sehr kleinen Umgebung. PATH enthält meist nur /usr/bin und /bin, die .bashrc wird nicht gelesen. Ein Skript, das im Terminal läuft, scheitert deshalb oft unter cron.
  • Prozentzeichen maskieren: Ein % im Befehl beendet für cron die Zeile. Schreiben Sie date +\%F statt date +%F.
  • Ausgaben sichern: cron schickt Ausgaben per Mail an den Besitzer. Ist kein Mailsystem eingerichtet, gehen sie meist verloren. Leiten Sie sie mit >> /pfad/job.log 2>&1 in eine Datei um.
  • System-crontab: In /etc/crontab und /etc/cron.d/ steht zwischen Zeitfeldern und Befehl zusätzlich der Benutzer. Unter Debian und Ubuntu ignoriert cron Dateien in /etc/cron.d/, deren Name einen Punkt enthält.
  • Zeitzone und Zeitumstellung: cron rechnet in der Zeitzone des Servers. Viele Server laufen in UTC – dann gibt es keine Zeitumstellung. In Ortszeit holen Vixie-cron und cronie feste Uhrzeiten, die in die übersprungene Stunde fallen, direkt nach der Umstellung nach und führen sie in der doppelten Stunde nur einmal aus. Mit der Umschaltung „UTC“ sehen Sie die Termine so, wie ein UTC-Server sie ausführt. Zum Umrechnen von Zeitpunkten hilft der Zeitstempel-Konverter.
  • Überwachen: Ein Cronjob, der still scheitert, fällt oft erst Wochen später auf. Wie Sie Aufträge und Backups mit einem Ping überwachen, zeigt die Anleitung Healthchecks: Cronjobs und Backups überwachen.

Die Grundlagen von crontab, Benutzer- und System-Tabellen erklärt die Anleitung Cron und crontab richtig nutzen. Für WordPress lohnt sich ein echter Cronjob statt des seitenaufrufgesteuerten WP-Cron – siehe WP-Cron durch echten System-Cron ersetzen.

cron oder systemd-Timer?

Auf Systemen mit systemd können Sie Aufträge auch als Timer planen. Ein Timer besteht aus zwei Dateien: der .timer-Unit mit dem Zeitplan und einer gleichnamigen .service-Unit mit dem Befehl. Das Tool erzeugt beide als Vorlage. Vorteile: Ausgaben landen im Journal (journalctl -u name.service), Persistent=true holt Termine nach, die der Rechner ausgeschaltet verpasst hat, und systemctl list-timers zeigt alle nächsten Läufe.

Die Schreibweise unterscheidet sich: OnCalendar=Mon..Fri *-*-* 09..17:00/15:00 entspricht */15 9-17 * * 1-5. systemd verknüpft Wochentag und Datum immer mit UND. Die ODER-Regel von cron bilden Sie mit zwei OnCalendar=-Zeilen in derselben Timer-Unit nach. Prüfen Sie jeden Ausdruck vor dem Einsatz mit systemd-analyze calendar. Wie Sie eigene Units anlegen und aktivieren, beschreibt die Anleitung systemd-Service selbst erstellen und verwalten.

Häufige Fragen

Warum läuft mein Cronjob nicht, obwohl der Ausdruck stimmt?

Meist liegt es an der Umgebung: Befehle ohne absoluten Pfad werden nicht gefunden, Variablen aus der .bashrc fehlen oder ein unmaskiertes % schneidet den Befehl ab. Leiten Sie die Ausgabe in eine Logdatei um und prüfen Sie das System-Log, unter Debian und Ubuntu etwa mit journalctl -u cron.

Wie lasse ich einen Job alle 90 Minuten laufen?

Mit einem einzigen Ausdruck geht das nicht, weil Schritte in jeder Stunde neu beginnen. Üblich sind zwei Zeilen: 0 0-21/3 * * * und 30 1-22/3 * * * ergeben zusammen 00:00, 01:30, 03:00, 04:30 und so weiter.

Kann cron Sekunden?

Nein, die kleinste Einheit ist die Minute. Ausdrücke mit sechs oder sieben Feldern stammen aus Quartz, Spring oder anderen Bibliotheken; dort steht die Sekunde vorne. Für Linux lassen Sie dieses Feld weg. Sonderzeichen wie ?, L, W und # kennt der Linux-cron ebenfalls nicht.

Wie plane ich einen Job für den letzten Tag im Monat?

cron kennt keinen „letzten Tag“. Bewährt hat sich, den Job an den Tagen 28 bis 31 zu starten und im Befehl zu prüfen, ob morgen der 1. ist: 0 23 28-31 * * [ "$(date -d tomorrow +\%d)" = 01 ] && /pfad/job.sh (GNU date).

Was bedeutet @weekly bei systemd?

Vorsicht: Die systemd-Kurzform weekly steht für Montag 00:00 Uhr, cron-@weekly dagegen für Sonntag 00:00 Uhr. Das Tool gibt deshalb immer die ausgeschriebene Form aus, bei @weekly also Sun *-*-* 00:00:00.