Utilia

Cron-expressie generator

Bouw een cron-expressie veld voor veld, lees het schema in gewone taal, zie de volgende uitvoeringen per tijdzone en zet hem om naar systemd, Quartz of AWS.

Bouwer

VeldModusWaarde
Minuut0–59
Uur0–23
Dag van de maand1–31, L
Maand1–12 of JAN–DEC
Dag van de week0–7 (0 en 7 = zondag) of SUN–SAT

Zo bouw je een cron-expressie

  1. Typ of plak een expressie in Cron-expressie, of kies er een uit Voorbeelden. Macro’s zoals @daily of @weekly worden ook geaccepteerd.
  2. Of gebruik de Bouwer: kies voor elk veld een Modus (Elke, Elke N, Specifieke waarden, Bereik of Aangepast) en vul de Waarde in. De expressie wordt meteen bijgewerkt, en als je de expressie aanpast, volgt de bouwer.
  3. Vink Secondenveld toevoegen (6 velden) aan als je planner seconden ondersteunt.
  4. Lees het schema In gewone taal (in het Nederlands), en controleer daarna de lijst Volgende uitvoeringen. Kies de Tijdzone van de server die de taak uitvoert en Hoeveel uitvoeringen je wilt zien.
  5. Kopieer de expressie met Kopiëren, of gebruik een van de Andere formaten.

Fouten worden per veld uitgelegd, bijvoorbeeld “Minuut: 61 valt buiten het bereik (0–59)”, zodat je precies weet wat je moet verbeteren.

De vijf cron-velden

Een standaard cron-regel (Vixie) heeft vijf velden, gevolgd door de opdracht:

Veld Toegestane waarden
Minuut 0–59
Uur 0–23
Dag van de maand 1–31
Maand 1–12 of JAN–DEC
Dag van de week 0–7 (0 en 7 zijn zondag) of SUN–SAT

Elk veld accepteert * (elke waarde), een lijst 1,15, een bereik 9-17, een stap */15 (elke 15 eenheden) of een bereik met stap 0-30/10. Zo betekent */15 9-17 * * 1-5: elk kwartier van 9:00 tot 17:45, maandag tot en met vrijdag.

Eén regel verrast veel mensen: zijn zowel Dag van de maand als Dag van de week beperkt, dan draait klassieke cron als een van beide overeenkomt. 0 0 13 * 5 draait op elke 13e en op elke vrijdag, niet alleen op vrijdag de 13e. De tool toont in dat geval een waarschuwing.

Volgende uitvoeringen en tijdzones

Cron gebruikt de klok van de machine, of de instelling CRON_TZ/TZ van de crontab. De lijst Volgende uitvoeringen wordt berekend voor de tijdzone die je kiest, inclusief de overgang van zomer- naar wintertijd en terug. Bij de overgang in het voorjaar kan een taak die om 2:30 staat worden overgeslagen, en in het najaar kan hij, afhankelijk van de implementatie, één of twee keer draaien. Voor taken die precies één keer moeten draaien kun je beter tijden buiten 1:00–3:00 kiezen of UTC gebruiken. De datums worden in Nederlandse notatie getoond.

Vixie cron, systemd-timers, Quartz en AWS

  • systemd-timers gebruiken OnCalendar= met een andere syntaxis: Mon..Fri *-*-* 09..17:00/15:00. Voorwaarden op weekdag en datum worden met EN gecombineerd, niet met OF, dus sommige cron-expressies hebben geen exact equivalent.
  • Quartz en Spring zetten een secondenveld vooraan en kunnen een jaarveld toevoegen. Een van de twee dagvelden moet ? zijn, en Quartz nummert weekdagen 1–7 vanaf zondag, anders dan de 0–6 van cron. De tool schrijft weekdagen daarom als namen (MON-FRI) om die valkuil te vermijden.
  • AWS EventBridge gebruikt cron(minuten uren dag maand weekdag jaar): zes velden, geen seconden, een ? in een van de dagvelden en een jaar aan het eind.

Standaard-cron heeft geen secondenveld. De vorm met 6 velden en seconden wordt door veel bibliotheken ondersteund (node-cron, Spring, Quartz), maar niet door de systeem-crontab.

Alles draait in je browser: de expressie wordt nergens naartoe gestuurd.

Veelgestelde vragen

Hoe laat ik een taak elke 5 minuten draaien?

Gebruik */5 * * * *. De taak draait op minuut 0, 5, 10… van elk uur.

Hoe laat ik een taak op de laatste dag van de maand draaien?

Veel planners accepteren L in het veld dag van de maand: 0 18 L * *. Met gewone Vixie cron laat je hem dagelijks op dag 28–31 draaien en test je in het script of morgen de 1e is.

Wat doet @reboot?

Het voert de opdracht één keer uit, wanneer de cron-daemon start. Er is geen schema, dus de tool kan er geen uitvoeringstijden voor tonen.

Waarom draait mijn taak niet op de getoonde tijd?

Controleer de tijdzone van de server, of je de crontab van de gebruiker of /etc/crontab gebruikt (die heeft een extra veld voor de gebruiker), en het PATH: cron start met een minimale omgeving.

Is 0 of 7 zondag?

Allebei. In het veld dag van de week betekenen 0 en 7 zondag, 1 is maandag en 6 is zaterdag.