Cron-expressie Parser
Ontleed cron-expressies in leesbare tekst. Bekijk volgende uitvoeringstijden en gebruik voorbeelden.
Belangrijkste functies
- Leesbare cron-uitleg
- Voorvertoning van de volgende 5 uitvoeringstijden
- Veelvoorkomende vooraf ingestelde expressies
- Visuele veld-uitsplitsing
Guide
Cron is een op tijd gebaseerd taakplanningssysteem dat in Unix-achtige besturingssystemen wordt gebruikt om opdrachten of scripts op specifieke intervallen uit te voeren. Een cron-expressie is een compacte tekenreeks die een schema definieert met vijf velden: minuut, uur, dag van de maand, maand en dag van de week. Hoewel cron-expressies een van de meest gebruikte planningsformaten in de informatica zijn, zijn ze berucht moeilijk in één oogopslag te lezen. Deze gids behandelt de syntaxis in detail, hoe je expressies leest en schrijft, veelvoorkomende patronen en praktische toepassingen. De vijf velden van een standaard cron-expressie staan van links naar rechts: minuut (0-59), uur (0-23), dag van de maand (1-31), maand (1-12) en dag van de week (0-7, waarbij zowel 0 als 7 zondag voorstelt). Elk veld accepteert specifieke waarden, bereiken, lijsten en speciale tekens. Een complete expressie zoals 30 14 * * 1-5 betekent om 14:30 op elke dag die maandag tot en met vrijdag is. De cron-parser van WebRecast vertaalt deze expressies naar gewone taal en toont de volgende geplande uitvoeringstijden. Het sterretje (*) is het jokerteken dat elke mogelijke waarde betekent. In het minutenveld betekent * elke minuut. In het maandveld betekent * elke maand. Als alle vijf velden sterretjes zijn (* * * * *), wordt de taak elke minuut van elk uur van elke dag uitgevoerd. Dit is de eenvoudigste cron-expressie en tevens een van de gevaarlijkste in productie als je niet de bedoeling hebt iets zo vaak uit te voeren. De schuine streep (/) geeft stapwaarden aan. */5 in het minutenveld betekent elke 5 minuten (0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55). */2 in het uurveld betekent elke 2 uur (0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22). Je kunt stappen combineren met bereiken: 1-30/5 in het minutenveld betekent elke 5 minuten gedurende de eerste halve uur (1, 6, 11, 16, 21, 26). Stappen maken het eenvoudig om regelmatige intervallen te creëren zonder elke waarde op te sommen. De komma (,) creëert een lijst van specifieke waarden. 1,15 in het veld voor dag van de maand betekent de 1e en de 15e van de maand. 0,30 in het minutenveld betekent op het hele uur en op 30 minuten over. MA,WO,VR in het veld voor dag van de week (als je cron-implementatie namen ondersteunt) betekent maandag, woensdag en vrijdag. Lijsten zijn nuttig wanneer je schema geen regelmatig interval volgt. Het koppelteken (-) definieert een bereik. 9-17 in het uurveld betekent elk uur van 9:00 tot 17:00. 1-5 in het veld voor dag van de week betekent maandag tot en met vrijdag. Bereiken zijn inclusief, wat betekent dat beide eindpunten zijn inbegrepen. Je kunt bereiken combineren met stappen: 0-23/2 betekent om het andere uur gedurende de hele dag, en 1-5 in het veld voor dag van de week met */10 in het minutenveld betekent elke 10 minuten op weekdagen. Sommige cron-implementaties ondersteunen extra tekens. Het vraagteken (?) wordt in sommige systemen (zoals de Quartz-planner) gebruikt om aan te geven dat er geen specifieke waarde is voor dag van de maand óf dag van de week, wanneer je er slechts één wilt specificeren. Het teken L betekent laatste (L in het veld voor dag van de maand betekent de laatste dag van de maand). Het teken W betekent dichtstbijzijnde weekdag (15W betekent de weekdag die het dichtst bij de 15e ligt). Het hekje (#) specificeert het nde voorkomen van een weekdag (2#3 betekent de derde dinsdag van de maand). Standaard Unix-cron ondersteunt deze niet, maar ze verschijnen in op Java gebaseerde planners en cron-services van cloudplatforms. Veelvoorkomende cron-patronen dekken de meeste planningsbehoeften. Elke minuut uitvoeren: * * * * *. Elke 5 minuten uitvoeren: */5 * * * *. Elk uur op minuut 0 uitvoeren: 0 * * * *. Dagelijks om middernacht uitvoeren: 0 0 * * *. Dagelijks om 3:30 uitvoeren: 30 3 * * *. Wekelijks op zondag om middernacht uitvoeren: 0 0 * * 0. Maandelijks op de 1e om middernacht uitvoeren: 0 0 1 * *. Op weekdagen om 9:00 uitvoeren: 0 9 * * 1-5. Elke 15 minuten tijdens kantooruren op weekdagen uitvoeren: */15 9-17 * * 1-5. De cron-parser-tool bevat deze veelvoorkomende voorinstellingen voor snelle naslag. Tijdzone-afhandeling is een kritieke overweging die de cron-expressie zelf niet adresseert. Een cron-expressie specificeert een tijd, maar in welke tijdzone? Op een lokale server draait cron meestal in de systeemtijdzone van de server. Cloudplatforms (AWS CloudWatch, Google Cloud Scheduler, Azure Logic Apps) laten je de tijdzone expliciet specificeren. Plan je taken voor een wereldwijd publiek of draaien ze op cloud-infrastructuur, verifieer en documenteer dan altijd naar welke tijdzone je cron-expressies verwijzen. Een taak gepland op 0 9 * * * betekent 9:00 in de tijdzone van de server, wat UTC, jouw lokale tijd of iets anders kan zijn. Zomertijd creëert randgevallen voor cron-schema's. Wanneer de klok vooruit gaat, bestaat het uur van 2:00 tot 3:00 niet. Een taak gepland op 2:30 tijdens de overgang in de lente kan worden overgeslagen of om 3:00 draaien, afhankelijk van de cron-implementatie. Wanneer de klok achteruit gaat, komt het uur van 1:00 tot 2:00 tweemaal voor. Een taak die in deze periode is gepland, kan tweemaal of eenmaal draaien, afhankelijk van de implementatie. UTC gebruiken voor cron-schema's vermijdt zomertijdproblemen volledig, daarom standaardiseren veel productiesystemen op UTC. Overlappende uitvoeringen treden op wanneer een taak langer nodig heeft om te voltooien dan het interval tussen geplande uitvoeringen. Is een taak elke 5 minuten gepland, maar duurt soms 8 minuten, dan begint de volgende uitvoering voordat de vorige klaar is. Dit kan bronconflicten, gegevenscorruptie of dubbele verwerking veroorzaken. Het cron-systeem zelf voorkomt overlappende uitvoeringen niet. Oplossingen zijn het gebruik van lock-bestanden (de taak controleert bij de start op een lock-bestand en stopt als er een bestaat), het gebruik van flock (een hulpprogramma voor bestandsvergrendeling) of het gebruik van een taakplanner met ingebouwde gelijktijdigheidscontrole. Loggen en monitoren van cron-taken is essentieel voor productiebetrouwbaarheid. Een cron-taak die stil faalt is erger dan een taak die nooit draaide. Leid taakuitvoer naar logbestanden door >> /var/log/mijntaak.log 2>&1 aan het cron-commando toe te voegen. Dit vangt zowel standaarduitvoer als fouten op. Stel monitoring in die je waarschuwt wanneer een taak faalt of niet op schema draait. Diensten zoals Healthchecks.io en Cronitor bieden 'dead man's switch'-monitoring waarbij je cron-taak bij voltooiing een URL pingt, en je wordt gewaarschuwd als de ping niet op tijd aankomt. Verschillen in omgeving tussen je interactieve shell en de cron-omgeving veroorzaken veel cron-taakfouten. Wanneer cron een taak uitvoert, gebruikt het een minimale omgeving die mogelijk PATH-vermeldingen, omgevingsvariabelen en shell-configuratie mist die je interactieve sessie wel heeft. Werkt een taak wanneer je hem handmatig uitvoert, maar faalt hij in cron, dan is de waarschijnlijke oorzaak een ontbrekende omgevingsvariabele of een uitvoerbaar bestand dat niet wordt gevonden omdat het niet in het cron-PATH staat. Oplossingen zijn het gebruik van absolute paden voor alle uitvoerbare bestanden (/usr/bin/python3 in plaats van python3), het expliciet instellen van omgevingsvariabelen bovenaan de crontab, of het sourcen van je shell-profiel aan het begin van het taakscript. Het crontab-commando beheert je cron-schema. crontab -e opent je crontab-bestand in een editor. crontab -l toont je huidige crontab-vermeldingen. crontab -r verwijdert je hele crontab (gebruik met zorg). Elke regel in het crontab-bestand is ofwel commentaar (beginnend met #), een toewijzing van een omgevingsvariabele (MAILTO=admin@example.com) of een schemavermelding (de vijf tijdvelden gevolgd door het uit te voeren commando). De variabele MAILTO stuurt taakuitvoer naar een e-mailadres, wat een nuttig monitoringmechanisme is voor kleine opstellingen. Systeembrede cron wordt beheerd via bestanden in /etc/cron.d/, /etc/cron.daily/, /etc/cron.hourly/, /etc/cron.weekly/ en /etc/cron.monthly/. Deze mappen gebruiken een iets ander formaat dat een gebruikersnaamveld bevat tussen het schema en het commando, waarmee wordt gespecificeerd welk gebruikersaccount de taak uitvoert. Systeempakketten en serverbeheerscripts gebruiken deze locaties meestal in plaats van individuele gebruikerscrontabs. Moderne alternatieven voor cron zijn onder meer systemd-timers op Linux-systemen, die functies bieden zoals willekeurige vertragingen, afhankelijkheidsbeheer en betere integratie van logging. Cloudplatforms bieden hun eigen planningsservices: AWS EventBridge (voorheen CloudWatch Events), Google Cloud Scheduler, Azure Logic Apps en Kubernetes CronJobs. Deze services gebruiken cron-expressiesyntaxis, maar voegen functies toe zoals herhaalbeleid, dead-letter-wachtrijen en monitoringdashboards. Begrip van de syntaxis van cron-expressies blijft essentieel, want al deze moderne tools gebruiken hetzelfde vijf-veld-formaat. Kubernetes CronJobs verdienen speciale vermelding omdat ze cron-planning combineren met containerorkestratie. Een Kubernetes CronJob maakt volgens schema een nieuwe pod aan, voert de taak uit in een container en ruimt op wanneer de taak klaar is. Het schemaveld gebruikt standaard cron-syntaxis. Aanvullende configuratie bepaalt het gelijktigheidsbeleid (Allow, Forbid of Replace), limieten voor de geschiedenis van geslaagde en mislukte taken, de seconden voor de startdeadline en de suspend-functionaliteit. Draai je workloads op Kubernetes, dan zijn CronJobs de standaard manier om terugkerende taken te plannen. De cron-parser van WebRecast neemt je expressie en levert drie dingen: een voor mensen leesbare uitleg van het schema (in gewone taal zoals 'elke 15 minuten op weekdagen'), een uitsplitsing van elk veld dat toont welke waarden het matcht, en de volgende 5 geplande uitvoeringstijden op basis van de huidige datum en tijd. Dit maakt het eenvoudig te verifiëren dat je expressie doet wat je wilt voordat je hem naar productie uitrollt. Voer je expressie in, lees de uitleg, controleer de volgende uitvoeringstijden en bevestig dat het schema aan je eisen voldoet. Cron-expressies testen vóór uitrol voorkomt planningsfouten die echte gevolgen kunnen hebben. Een back-uptaak die elk uur draait in plaats van dagelijks verspilt schijfruimte. Een facturatietaak die dagelijks draait in plaats van maandelijks brengt klanten te veel in rekening. Een opschoningstaak die elke minuut draait in plaats van elk uur creëert onnodige serverbelasting. Parseer en verifieer je cron-expressie altijd met een tool zoals deze voordat je hem aan je crontab of cloud-schedulerconfiguratie toevoegt. De paar seconden verificatie kunnen uren debuggen voorkomen, of erger.
Veelgestelde vragen
Wat is een cron-expressie?
Een cron-expressie is een tekenreeks van 5 velden (minuut, uur, dag, maand, weekdag) die een schema definieert voor terugkerende taken.
Wat betekent */5 in cron?
De syntaxis */5 betekent 'elke 5e interval'. Bijvoorbeeld */5 in het minutenveld betekent elke 5 minuten.
