Crontab Guru

Plak een cron-expressie en krijg een veld-voor-veld uitleg, in eenvoudig Engels, van wat hij doet. U hoeft de veldvolgorde niet te onthouden of bereiken op te zoeken: de guru doorloopt elk van de vijf velden (minuut, uur, dag van de maand, maand en dag van de week) en leest de expressie van links naar rechts. Handig om een crontab-regel te controleren voordat u hem in productie zet, of om een overgenomen regel uit te leggen.

Zo gebruikt u de guru

  1. 1

    Plak de expressie

    Kopieer elke standaard cron-expressie met 5 velden (bijvoorbeeld `0 9 * * 1-5`) in het invoerveld.

  2. 2

    Vraag de uitleg

    Klik op Explain Cron en de tool geeft een regel-voor-regel beschrijving van elk veld: minuut, uur, dag van de maand, maand en dag van de week.

  3. 3

    Lees de beschrijving

    De uitleg wordt in het Engels gegenereerd, bijvoorbeeld "Minute: every 5 minutes" of "Hour: from 9 through 17."

  4. 4

    Controleer vóór de uitrol

    Gebruik de uitleg om te bevestigen dat het schema doet wat u wilt, voordat u het in uw crontab, CI-configuratie of Kubernetes-manifest zet.

Spiekbriefje per veld

 ┌───────────── minuut (0-59)
 │ ┌─────────── uur (0-23)
 │ │ ┌───────── dag van de maand (1-31)
 │ │ │ ┌─────── maand (1-12 of JAN-DEC)
 │ │ │ │ ┌───── dag van de week (0-6 of SUN-SAT; zo = 0 of 7)
 │ │ │ │ │
 * * * * *

Operatoren in cron-expressies

Operator Betekenis Voorbeeld
* Elke waarde * * * * *
, Lijst van waarden 0,15,30,45
- Bereik 9-17
/ Stap (start/stap) */5, 0-30/5
L Laatste (dag-van-maand of laatste weekdag, Quartz) L, 5L
W Dichtstbijzijnde weekdag 15W (Quartz)
# N-de weekdag van de maand 1#3 (Quartz)
? Geen specifieke waarde Alleen Quartz

Leesvolgorde is belangrijk

0 */2 * * 1-5 leest u van links naar rechts als: minuut 0, elke 2 uur, elke dag van de maand, elke maand, maandag tot en met vrijdag. Mensen lezen de velden uit gewoonte soms van rechts naar links en raken in de war; begin altijd bij de minuut.

De valkuil van “elke X minuten”

*/10 * * * * vuurt op minuut 0, 10, 20, 30, 40, 50, niet “elke 10 minuten vanaf het moment dat de taak is aangemaakt.” Cron-stappen meten altijd vanaf het begin van het bereik van het veld. Als u een taak om 12:03 uitrolt, is de eerste uitvoering om 12:10, niet om 12:13.

Voor taken die echt “N minuten na de laatste uitvoering” nodig hebben, gebruikt u een scheduler met een persistente timer (systemd-timers met OnUnitActiveSec, of scheduling op applicatieniveau met een opgeslagen timestamp van de laatste uitvoering).

Cron-valkuilen die u moet kennen

  • Dag-van-maand én dag-van-week beide ingesteld: de meeste cron-implementaties behandelen dit als OF-gedrag, waarschijnlijk niet wat u wilt.
  • Stap van 0: */0 is ongeldig.
  • Bereik dat omslaat: 22-2 voor uren werkt niet in klassieke cron; gebruik 22-23,0-2.
  • 30 februari: een schema als 0 0 30 2 * vuurt nooit.
  • Zomertijd-dubbelzinnigheid: taken die tussen 2 en 3 uur ’s nachts staan gepland, kunnen op overgangsdagen twee keer of nul keer vuren.

Cron versus moderne schedulers

Unix-cron is nog overal te vinden, maar voor iets kritieks wilt u waarschijnlijk:

  • systemd-timers: vangen gemiste uitvoeringen op, ondersteunen gerandomiseerde offsets, lezen uit unit-bestanden.
  • Kubernetes CronJob: declaratief, herhaalpogingen, tijdzonebewust vanaf 1.25+.
  • Airflow / Prefect / Dagster: voor taken met afhankelijkheden, herhaalpogingen, backfills en observability.
  • GitHub Actions schedule: cron met 5 velden, alleen UTC, minimaal interval van 5 minuten, best-effort levering.

Cron zelf is een prima formaat, maar een slechte scheduler voor taken die niet gemist mogen worden.

Veelgestelde vragen

Omdat dag-van-week 0 in standaard cron zondag is (en 7 ook zondag is, zodat beide conventies worden ondersteund). Maandag is 1. Quartz nummert weekdagen 1-7 met zondag = 1, wat mensen die tussen dialecten wisselen geregeld op het verkeerde been zet.

Klassieke Unix-cron draait in de lokale tijdzone van de server, wat /etc/timezone ook aangeeft. Kubernetes CronJob, GitHub Actions en de meeste cloudschedulers draaien standaard in UTC. Controleer dit altijd en gebruik waar mogelijk UTC om zomertijdverrassingen te voorkomen.

Klassieke cron kan dit niet direct uitdrukken. Workaround: draai elke maandag en controleer de datum in het script: [ $(date +%d) -le 7 ] && ./job.sh. Quartz ondersteunt het van nature met 1#1.

Nee. Elk schema heeft zijn eigen regel nodig. Maar u kunt meerdere schema’s combineren op één regel met lijsten: 0 9,17 * * * draait om 9:00 en 17:00. Voor schema’s die niet als één regel zijn uit te drukken, voegt u meerdere regels toe die naar hetzelfde commando wijzen.

Gerelateerde tools