Wat is een cron-expressie?
Een cron-expressie is een compacte planningstekenreeks die een taakplanner precies vertelt wanneer een taak moet worden uitgevoerd. Het formaat ontstond in 1975 in de Unix V7 cron-daemon en is sindsdien nauwelijks veranderd — dezelfde grammatica met vijf velden duikt vandaag op in Kubernetes CronJobs, AWS EventBridge, GitHub Actions-workflows, Google Cloud Scheduler, GitLab CI, Jenkins-pipelines en het crontab-binaire bestand dat met elke Linux-distributie wordt meegeleverd. De grammatica stopt veel betekenis in dertien of zo tekens, en dat is waarom een parser die dit omzet naar gewoon Nederlands het verschil maakt tussen een zelfverzekerde deploy en een rollback om 3 uur ’s nachts.
Hoe werkt een cron-expressie?
Een standaard cron-expressie heeft vijf door spaties gescheiden velden die samen een herhalend schema bepalen. De engine vergelijkt elke minuut de huidige klok met de expressie en voert de taak uit wanneer alle vijf velden overeenkomen. De velden van links naar rechts:
- Minuut (0–59). Welke minuut in het uur de taak wordt uitgevoerd.
0betekent op het hele uur,30op het halve uur,*/5elke vijf minuten (00, 05, 10, ...) en15,45op kwart over en kwart voor. - Uur (0–23). Welk uur van de dag op de 24-uursklok.
0is middernacht,9is 9:00,17is 17:00. Bereiken (9-17voor kantooruren) en stapwaarden (*/2voor elk tweede uur) werken op dezelfde manier als bij minuten. - Dag van de maand (1–31). Welke kalenderdag wordt uitgevoerd.
1betekent de 1e van de maand,*elke dag,1,15de 1e en de 15e. Let op bij31— het sluit maanden zonder 31e dag stil over. - Maand (1–12 of JAN–DEC). Welke maanden worden uitgevoerd.
*betekent elke maand,1,7januari en juli,1-3alleen het eerste kwartaal. Drieletter-maandnamen zijn hoofdletterongevoelig in de meeste implementaties. - Dag van de week (0–7, waarbij zowel 0 als 7 zondag betekent). Beperkt uitvoering tot bepaalde weekdagen.
1-5is maandag tot en met vrijdag,0,6is het weekend,MON-FRIwerkt in de meeste parsers. Wanneer zowel dag van de maand als dag van de week op specifieke waarden zijn ingesteld, wordt de taak bij klassieke cron uitgevoerd bij een van beide overeenkomsten (logische OF) — wat mensen elke keer verrast.
Waarom een cron-expressieparser gebruiken?
- Vang de stille vergissing vóór de deploy. De expressie
0 2 */3 * *wordt om 2:00 elke derde dag uitgevoerd, niet elke drie minuten — plak het hier en je ziet dat in gewoon Nederlands vóór het naar productie gaat. - De meeste cloudplanners draaien standaard in UTC. Door de volgende tien uitvoertijden in je lokale tijdzone te bekijken, ontdek je de zomertijdverschuiving van een uur vóór iemand om 3 uur ’s nachts wordt gewekt.
- Snelkoppelingen zoals
@daily,@weeklyen@monthlyzijn handig maar vaag. De parser toont je de onderliggende vijf-veld-vorm zodat je precies weet wat er is gepland. - Met de veld-voor-veld-bouwer stel je een schema veld voor veld samen en zie je de leesbare omschrijving live bijwerken — dat is een stuk sneller dan de cron-manpagina voor de tiende keer te herlezen.
Waar worden cron-expressies gebruikt?
Cron-syntax duikt op overal waar een taak op een klok moet herhalen. Drie van de meest voorkomende contexten, met de bekende valkuil van elk:
- Back-upplanningen. Het klassieke
crontab -e-item dat een database naar S3 dumpt om 2:00 uur ’s nachts, of eenpg_dump-archief roteert op de 1e van elke maand. Een regel als0 2 * * * /usr/local/bin/backup.shstaat op meer Linux-servers dan welke andere cron-regel ook. Krijg het minuut en uur goed, leid stderr ergens duurzaam naartoe en je hebt een handmatige checklist vervangen door een script dat zichzelf uitvoert. - GitHub Actions
schedule-triggers. De sleutelon.schedule.cronin.github/workflows/*.ymlaccepteert standaard vijf-veld-cron, maar de taak draait altijd in UTC en GitHub slaat een uitvoertijdstip stil over als de runner-wachtrij bezet is. Gangbaar patroon:cron: '0 9 * * 1-5'om een maandag-tot-vrijdag-digest om 9:00 UTC te sturen. Bekijk het hier in je lokale tijdzone vóórdat je een digest om 9:00 belooft die in de zomer om 11:00 aankomt. - AWS EventBridge Scheduler. EventBridge cron-expressies gebruiken een zesde veld voor het jaar en vereisen
?in plaats van*in ofwel het dag-van-de-maand- of dag-van-de-weekveld —cron(0 9 ? * MON-FRI *)is de EventBridge-vertaling van de klassieke weekdag-9:00-standaard-cron. Gebruikt voor geplande Lambda-aanroepen, ECS-taakvervolgingen en Step Function-starts; de mismatch met klassieke cron-syntax is de voornaamste bron vanValidationException-fouten in CloudFormation-deploys.
Hoe ziet een echte cron-expressie eruit?
Neem 0 9 * * 1-5 — wordt uitgevoerd om 9:00, elke werkdag. De velden van links naar rechts: 0 is de nulde minuut van het uur, 9 is 9:00 op de 24-uursklok, * bij dag van de maand betekent elke kalenderdag, * bij maand betekent elke maand, en 1-5 bij dag van de week beperkt uitvoering tot maandag tot en met vrijdag (waarbij 1 = maandag in de standaard cron-nummering). Plak dat in het invoerveld hierboven en de parser bevestigt Om 09:00, maandag tot en met vrijdag met de volgende tien data in de IANA-tijdzone die je kiest. Hetzelfde in AWS EventBridge-syntax is cron(0 9 ? * MON-FRI *) — let op het jaarveld aan het einde en de ? waar standaard-cron * zou gebruiken. Hetzelfde als Quartz-expressie (zes velden met voorloopse seconden) is 0 0 9 ? * MON-FRI. Drie platforms, drie oppervlakvormen, één onderliggend schema.
Cron-expressies zijn op precies één manier meedogenloos: een typefout geeft je een syntactisch geldige planning die op het verkeerde tijdstip wordt uitgevoerd, zonder fout om op te vangen bij code review. 0 0 1 * * lezen en weten dat het om middernacht op de 1e van elke maand draait, niet op 1 januari, vergt oefening. De parser hierboven maakt van die oefening een controle van tien seconden — plak de expressie, lees de Nederlandse omschrijving, scan de volgende tien uitvoertijden in je lokale tijdzone, en ship de YAML wetende dat de cron-regel precies doet wat het commit-bericht zegt.
Wat is het verschil tussen cron met 5 en 6 velden?
Vijf-veld-cron is de klassieke Unix-grammatica met een minimale resolutie van één minuut. Zes-veld-cron voegt een voorloopse sekundenkolom toe voor sub-minuutplanning — gebruikt door Quartz en Spring’s @Scheduled. AWS EventBridge gebruikt ook zes velden, maar het extra veld is een volgend jaar, geen seconden.
Wat betekenen @hourly, @daily en @weekly?
Vixie-cron-bijnamen geïntroduceerd in 1987. @hourly = 0 * * * *, @daily = 0 0 * * *, @weekly = 0 0 * * 0, @monthly = 0 0 1 * *, @yearly = 0 0 1 1 *. @reboot wordt eenmalig bij het opstarten uitgevoerd. GitHub Actions en EventBridge weigeren deze aliassen.
Is zondag dag 0 of dag 7 in cron?
Beide, in klassieke Vixie-cron — 0 en 7 worden geaccepteerd zodat bereiken zoals 5-7 op een natuurlijke manier vrijdag tot en met zondag lezen. Maandag is altijd 1, zaterdag altijd 6. Quartz en AWS EventBridge gebruiken een andere conventie: 1-7 met zondag als 1. Raadpleeg de platformdocumentatie voordat je aannames doet.
Hoe gaat cron om met zomertijd?
Dat hangt af van de tijdzone van de engine. In UTC (de standaard bij EventBridge, Kubernetes en GitHub Actions) bestaat zomertijd niet. In een lokale zomertijdzone slaat klassieke Vixie-cron taken over tijdens de voorjaarssprong en voert ze tweemaal uit bij de herfstterugval; systemd-timers worden precies één keer uitgevoerd.