De volgende uitvoeringen van een cron-expressie berekenen

parseert een cron-expressie en toont de volgende uitvoeringsdatums

Wat is een cron-expressie?

Een cron-expressie is een korte tekenreeks die een herhaling in de tijd beschrijft. Het van Unix geërfde formaat bestaat uit vijf velden gescheiden door spaties: minuut, uur, dag van de maand, maand en dag van de week. Deze syntaxis is geboren met de cron-daemon van Brian Kernighan in de jaren 1970, vervolgens veralgemeend door de Vixie cron (1987) overgenomen door alle moderne Linux- en macOS-distributies. Vandaag wordt dezelfde syntaxis teruggevonden in de meerderheid van cloudplanners (AWS EventBridge, GCP Cloud Scheduler, Azure Logic Apps) en CI/CD (GitHub Actions, GitLab CI, Jenkins).

┌──── minute (0-59)
│ ┌── heure (0-23)
│ │ ┌── jour du mois (1-31)
│ │ │ ┌── mois (1-12 ou JAN-DEC)
│ │ │ │ ┌── jour de la semaine (0-7 ou SUN-SAT, 0 et 7 = dimanche)
│ │ │ │ │
* * * * *

Een goed gevormde cron-expressie definieert dus een precieze cron schedule: elk veld kan een vaste waarde, een bereik, een lijst, een stap of een asterisk zijn die alles matcht. De compactheid van de crontab-expressie is zijn kracht, maar het is ook wat een cron decoder onmisbaar maakt om de bedoeling visueel te valideren. Dat is het hele doel van deze cron converter: een leesbare cron-uitleg produceren, plus de lijst van volgende uitvoeringen.

Anatomie van een cron-expressie

De vijf velden delen een gemeenschappelijke grammatica. Dit zijn de aanvaarde grenzen voor elke kolom van een standaard crontab-expressie:

  • Minuut: 0-59.
  • Uur: 0-23, 24-uursformaat.
  • Dag van de maand: 1-31.
  • Maand: 1-12 of de tekstuele afkortingen JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC.
  • Dag van de week: 0-7 waarbij 0 en 7 beide zondag vertegenwoordigen, of de afkortingen SUN, MON, TUE, WED, THU, FRI, SAT.

Speciale tekens gedeeld door de vijf velden:

  • *: any value, matcht alle toegestane waarden van het veld.
  • ,: discrete lijst, bijvoorbeeld 1,15,30 in het minuutveld.
  • -: inclusief bereik, bijvoorbeeld 9-17 voor kantooruren.
  • /: stap (step), bijvoorbeeld */15 = elke 15 eenheden, of 0-30/5 = elke 5 minuten tussen 0 en 30.

Quartz-extensies (Java, AWS EventBridge, Spring): de grammatica gaat naar 6 of 7 velden met een seconden-kolom vooraan (0-59) en soms een jaar-kolom achteraan (1970-2099). Quartz introduceert ook ? (no specific value, om dag-van-de-maand en dag-van-de-week te ontkoppelen), L (last: laatste dag van de maand, of laatste vrijdag met 5L), W (dichtstbijzijnde werkdag) en # (N-de dag van de week van de maand, bijvoorbeeld 2#3 voor de 3e maandag). Een Quartz-expressie is over het algemeen niet compatibel met een UNIX-crontab en vice versa: het is de belangrijkste bron van fouten wanneer een cron-expressie van het ene platform naar het andere wordt gekopieerd.

# UNIX / Vixie cron (5 champs)
0 9 * * 1-5

# Quartz (6 champs avec secondes)
0 0 9 ? * MON-FRI

# Quartz (7 champs avec année)
0 0 9 ? * MON-FRI 2026

Waarom een cron-expressie decoderen?

0 0 * * * lezen is snel. */7 2-5 1,15 * 1-5 lezen is duidelijk minder zo. Wanneer een expressie buiten het triviale gaat, stijgt het risico op interpretatiefouten en wordt de cron decode een volwaardige reviewstap.

  • Productie-debug: begrijpen waarom een taak om 03u17 is geactiveerd en niet om 03u00, of een overlap tussen twee taken identificeren.
  • Code review: valideren dat een in pull request gepushte planner doet wat de auteur beweert, zonder de semantiek van elk symbool te moeten onthouden.
  • Audit van planners: de cron jobs Linux doornemen in /etc/crontab en /etc/cron.d/, de Jenkins-triggers, de spec.schedule van Kubernetes CronJob, de regels AWS EventBridge en de GCP Cloud Scheduler-taken.
  • Legacy-migratie: een historische /etc/crontab overnemen zonder documentatie en de taakkartografie reconstrueren voor een infrastructuurwijziging.
  • Onboarding: een nieuwe ontwikkelaar toelaten om een crontab te herlezen zonder van de ene dag op de andere alle speciale tekens te moeten leren.

Hoe u de cron decoder gebruikt

De te volgen stappen om een crontab-expressie met de tool te decoderen:

  1. Plak uw cron-expressie in het invoerveld (5 velden gescheiden door spaties).
  2. Geef het aantal te berekenen volgende uitvoeringen aan.
  3. Klik op convert om de cron decode te starten: de tool geeft een menselijke zin terug die de activering uitlegt, plus de gedateerde lijst van volgende uitvoeringen.
  4. Controleer visueel of de data overeenkomen met uw bedoeling (uur, dag, frequentie).
  5. Kopieer de uitvoer via de kopieerknop om deze in een ticket, een PR of technische documentatie te plakken.

De tool beperkt zich niet tot een syntactische parsing: hij biedt een cron-uitleg in natuurlijke taal, wat hem zowel een cron decoder als een planningsvalidator maakt.

Klassieke voorbeelden van cron-expressies

De onderstaande patronen dekken de essentie van cron schedules die in productie worden tegengekomen. Ze zijn allemaal geldig op Linux crontab, Kubernetes CronJob, GitHub Actions en de meerderheid van applicatieplanners.

Expressie Menselijke lezing
* * * * * Elke minuut
0 * * * * Elk uur op de klok
0 0 * * * Elke dag om middernacht
0 0 * * 0 Elke zondag om middernacht
*/15 * * * * Elke 15 minuten
0 9 * * 1-5 9u00 van maandag tot vrijdag
0 0 1 * * De 1e van elke maand om middernacht
0 0,12 * * * Om middernacht en middag elke dag
*/5 9-17 * * 1-5 Elke 5 minuten tijdens werkuren
30 2 1,15 * * De 1e en de 15e van de maand om 2u30

Om een cron-taak uit te voeren op een Linux-server, bewerkt u de gebruikers-crontab vanuit de shell:

# éditer la crontab de l'utilisateur courant
$ crontab -e

# lister les tâches existantes
$ crontab -l

# exemple de ligne ajoutée : sauvegarde quotidienne à 3h
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

Voorbeeld van uitvoer van de cron converter voor */5 * * * *:

2026-05-05 00:00:00
2026-05-05 00:05:00
2026-05-05 00:10:00
2026-05-05 00:15:00
2026-05-05 00:20:00
...

Veelgestelde vragen over de cron decoder

Wat is het verschil tussen UNIX-cron en Quartz?

UNIX/Vixie cron gebruikt 5 velden (minuut tot dag-van-de-week), zonder secondenprecisie, en heeft geen native notie van "laatste dag van de maand". Quartz (Java, Spring, AWS EventBridge) voegt een seconden-kolom toe vooraan, soms een jaar-kolom achteraan, en meerdere symbolen (?, L, W, #) afwezig in de Linux-crontab. Een Quartz cron-expressie met 6 velden is dus niet direct overdraagbaar naar /etc/crontab en omgekeerd. Onze cron decoder richt zich op het 5-veldenformaat, dat de meerderheid van planners dekt.

Hoe voer ik een cron-taak elke 5 minuten uit?

Met de stap / op het minuutveld:

*/5 * * * * /usr/local/bin/check-health.sh

Deze crontab-expressie activeert het script op minuten 0, 5, 10, 15... van elk uur, elke dag. Om te beperken tot werkuren van maandag tot vrijdag, voeg de beperkingen toe op de velden uur en dag-van-de-week: */5 9-17 * * 1-5.

Wat betekent de asterisk (*) in een cron-expressie?

De asterisk betekent any value: hij matcht alle toegestane waarden van het veld. In 0 0 * * * betekenen de drie sterren "elke dag van de maand, elke maand, elke dag van de week". Gecombineerd met de eerste twee velden vastgesteld op 0, krijgen we "elke dag om middernacht". De ster kan ook gecombineerd worden met een stap: */15 in minuut = elke 15 minuten.

Heeft crontab een tijdzone?

Standaard de tijdzone van de server. Op een Linux-crontab is dat de systeem-TZ (vaak UTC op VPS en containers). GitHub Actions forceert UTC. Kubernetes CronJob gebruikt de tijdzone van de controller, configureerbaar via spec.timeZone sinds 1.27. AWS EventBridge evalueert de expressies in UTC. De applicatieplanners (Symfony Scheduler, Quartz, Airflow) staan vaak toe om een specifieke tijdzone per taak in te stellen. In geval van twijfel, controleer date op de doelserver en vergelijk met de uitvoer van de cron converter.

Cron job vs commando at: welke kiezen?

cron dient om een terugkerende taak volgens een planning uit te voeren. at dient om een commando één keer op een gegeven moment uit te voeren. Voor een dagelijkse back-up, een logrotatie of een regelmatige API-oproep, gebruik cron. Om een eenmalige bewerking uit te stellen ("herstart deze deployment om 22u vanavond"), gebruik at:

$ echo "/usr/local/bin/deploy.sh" | at 22:00
Hoe test ik een cron-expressie zonder deze te activeren?

Dat is precies de rol van deze cron converter: hij berekent de N volgende uitvoeringen vanaf het huidige moment, zonder enige taak te starten. U ziet onmiddellijk of uw crontab-expressie om 03u00 afgaat zoals gepland of bij toeval om 03u17. Om verder te gaan voor het installeren van de taak, kunt u ook het script alleen testen (bash -x script.sh) en de syntaxis van een crontab-bestand verifiëren met crontab -T bestand op de distributies die het ondersteunen.

Wat gebeurt er als dag-van-de-maand en dag-van-de-week beide zijn vastgesteld?

Op Vixie cron (Linux) is de regel een logische OF: de taak gaat af als een van de twee velden matcht. Dat is contra-intuïtief en een bron van bugs. Quartz gebruikt een EN, vandaar de introductie van het symbool ? om expliciet "geen beperking" te signaleren. In het algemeen, stel slechts één van de twee velden vast.

Voorbeeldverzoek

curl -X POST https://cdrn.fr/api/v1/tools/cron-converter/execute \
  -H "Content-Type: application/json" \
  -d '{"cron":"...","number_next_date":1}'

Invoerschema

Veld Type Vereist Standaard
cron string
number_next_date integer

Endpoints

  • GET https://cdrn.fr/api/v1/tools - toont alle beschikbare tools
  • GET https://cdrn.fr/api/v1/tools/cron-converter - geeft het schema van deze tool terug
  • POST https://cdrn.fr/api/v1/tools/cron-converter/execute - voert deze tool uit met een JSON-payload