Cron-expressie uitgelegd
De tool werkt twee kanten op: voer een schema in crontab-formaat in om het uitgelegd te krijgen, of beschrijf het schema in woorden om de expressie te krijgen.
Vijf velden: minuut, uur, dag van de maand, maand en dag van de week. Een zesde veld voor seconden mag vooraan staan.
Voorbeelden
Betekent
Om de 15 minuten van 5 tot en met 59, tijdens de uren 9–17, op maandag–vrijdag
Veld voor veld
| Veld | Expressie | Waarden |
|---|---|---|
| Minuut | 5-59/15 | 5, 20, 35, 50 |
| Uur | 9-17 | 9, 10, 11, 12, 13, 14, 15, 16, 17 |
| Dag van de maand | * | alle |
| Maand | * | alle |
| Dag van de week | MON-FRI | maandag, dinsdag, woensdag, donderdag, vrijdag |
Volgende uitvoeringen
…
Zomertijd wordt behandeld zoals in Vixie cron en cronie: een vaste tijd draait één keer, ook als het uur wordt overgeslagen of herhaald, terwijl taken met * in de minuut of het uur de nieuwe klok volgen.
Zo werkt het
Een cron-expressie heeft vijf velden, gescheiden door spaties: 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 is). Elke minuut controleert cron of de klok met alle velden overeenkomt en start de taak als dat zo is.
In elk veld betekent * elke waarde, 1-5 een bereik, 1,15 een lijst en */15 elke vijftiende waarde. Stappen kunnen ook met bereiken worden gecombineerd: 5-59/15 geeft de minuten 5, 20, 35 en 50. Maanden en dagen van de week kunnen als Engelse afkortingen worden geschreven, JAN–DEC en SUN–SAT.
Als zowel de dag van de maand als de dag van de week beperkt is, is het genoeg dat een van beide overeenkomt. 0 0 13 * 5 draait daarom op de 13e van elke maand en op elke vrijdag, niet alleen op vrijdag de 13e. De regel komt uit Vixie cron en geldt op de meeste Linux-systemen. Begint een van de velden met *, ook met een stap zoals */2, dan moeten beide overeenkomen.
De macro’s @hourly, @daily, @weekly, @monthly en @yearly (of @annually) zijn afkortingen voor gangbare schema’s, en @reboot voert de taak één keer uit wanneer cron start. Een zesde veld voor seconden vooraan, ? voor “elke dag” en L voor de laatste dag van de maand komen uit Quartz, Spring en vergelijkbare planners, en gewone crontab begrijpt ze niet.
Cron volgt de lokale tijd van de computer. Wanneer de zomertijd begint en de klok van 2.00 naar 3.00 uur springt, draait een taak met een vaste tijd in het overgeslagen uur direct na de overgang, en wanneer de klok teruggaat draait die maar één keer. Taken met * in het minuut- of uurveld volgen juist de nieuwe klok. De lijst hier werkt op dezelfde manier, in je tijdzone of in UTC.
Controleer welke implementatie je schema uitvoert. Clouddiensten hebben vaak hun eigen varianten: AWS EventBridge heeft bijvoorbeeld zes velden met het jaar als laatste en vereist ? in de dag van de maand of de dag van de week, en veel diensten werken in UTC in plaats van lokale tijd.
Andersom kun je het schema ook in woorden beschrijven: “elke maandag om 9 uur”, “elke 15 minuten”, “op de eerste dag van de maand om 2.30”, “op werkdagen tussen 9 en 17 uur” of “om de 2 uur tussen 8 en 18 uur”. Tijden worden gelezen als 9, 9.30, 9:30 en 09h30, bereiken als 9–17 en lijsten als 1, 15. Wordt de zin begrepen, dan verschijnt de expressie meteen, en de uitleg erboven zegt in woorden wat die betekent, zodat je kunt zien of het is wat je bedoelde. Wordt de zin niet begrepen, dan worden de woorden genoemd die niet gelezen konden worden, in plaats van dat er iets wordt geraden.
De bouwer onder het tekstvak doet hetzelfde met keuzes in plaats van woorden, en de twee blijven gelijk: een zin vult de keuzes in, en elke wijziging in de keuzes herschrijft de expressie. Niet alles is in cron uit te drukken. In gewone crontab is er geen manier om “de eerste maandag van de maand” of “om de week” te zeggen, en twee verschillende tijden in één zin (9 en 17 uur) worden als lijst in het uurveld geschreven: 0 9,17 * * *.