Ga naar inhoud

Cron-expressiessyntaxis

Een cron-expressie is vijf velden die beschrijven wanneer iets moet uitvoeren. Elk veld zegt welke waarden van zijn eenheid aanvaardbaar zijn, en de taak voert uit op elk moment waar alle vijf het eens zijn. Dat is het hele model: er is geen duurconcept, geen 'elke 90 minuten' en geen state die ergens wordt bijgehouden.

De velden worden van links naar rechts gelezen als minuut, uur, dag van maand, maand, dag van week. De voorbeelden onderaan zijn degene waar mensen werkelijk naar grijpen, en elk ervan wordt door de eigen cron-parser van deze site gecontroleerd voordat deze pagina wordt gebouwd.

De laatste sectie somt syntaxis op die op cron lijkt maar niet hier wordt geaccepteerd: Quartz- en Jenkins-extensies, en de zes-veldsvariant met seconden. Ze zijn de moeite waard om te kennen, want een gekopieerde expressie die er een gebruikt zal gewoon mislukken.

De vijf velden

7

Een cron-regel is vijf velden gescheiden door witruimte, gevolgd door de opdracht. Elk veld moet aanwezig zijn; er is geen manier om er één over te slaan.

ExpressieBereikBetekenis
* * * * *min hod dom mes dowDe vijf velden in volgorde: minuut, uur, dag van maand, maand, dag van weekVijf sterren betekenen elke minuut van elke dag — de los mogelijke expressie.
minute0-59Eerste veld
hour0-23Tweede veld, op 24-uursbasis
day of month1-31Derde veldEen dag die niet in een bepaalde maand bestaat wordt eenvoudig overgeslagen — 31 voert zeven keer per jaar uit, niet twaalf.
month1-12Vierde veld
day of week0-7Vijfde veld, zondag eerstZowel 0 als 7 betekenen zondag, daarom loopt het bereik tot zeven in plaats van zes.
0 5 13 * 5Wanneer beide dagvelden beperkt zijn voert cron uit op beide — niet op beideDit voert uit op de 13e en op elke vrijdag, dus het is geen 'vrijdag 13'. Het is de ene regel in cron die iedereen verrast.

Operatoren

10

Dezelfde vier operatoren werken in elk veld; alleen de getallen die zij accepteren veranderen.

ExpressieBereikBetekenis
*Elke waarde die het veld toestaat
1,15,30Een lijst van individuele waarden
9-17Een inclusief bereik
*/15Elke n-de waarde over het hele veld*/15 in het minutenveld betekent :00, :15, :30 en :45 — het telt van het veldbereikbegin, niet van nu.
9-17/2Elke n-de waarde in een bereik
5/10Elke n-de waarde van beginpunt tot veldende
0,30 9-17 * * 1-5Operatoren combineren vrij, in elk veldElk half uur, tussen 9 en 17, maandag tot vrijdag.
JAN-DEC1-12Maandnamen, drie letters, niet-hoofdlettergevoelig
SUN-SAT0-6Dagnamen, drie letters, niet-hoofdlettergevoelig
70Zondag, anders geschreven

Snelkoppelingen

7

Zeven namen die voor een hele expressie staan. Ze zijn een gemak van het crontab-bestandsformaat in plaats van deel van de veldgrammatica, dus een scheduler die cron-reeksen leest hoeft ze niet noodzakelijk te accepteren.

ExpressieBereikBetekenis
@hourly0 * * * *Op het hoogtepunt van elk uur
@daily0 0 * * *Eenmaal per dag om middernacht
@midnight0 0 * * *Hetzelfde als @daily
@weekly0 0 * * 0Eenmaal per week, zondag om middernacht
@monthly0 0 1 * *De eerste van de maand om middernacht
@yearly0 0 1 1 *De eerste van januari om middernacht
@annually0 0 1 1 *Hetzelfde als @yearly

Gemaakte voorbeelden

14

Lees er een van rechts naar links als het niet meer logisch is: het ruwste veld ligt rechts en bepaalt welke dagen de fijnere überhaupt gecontroleerd worden.

ExpressieBereikBetekenis
* * * * *Elke minuut
*/5 * * * *Elke vijf minuten
0 * * * *Elk uur, op het uur
0,30 * * * *Elk half uur
0 3 * * *Elke dag om 03:00
0 9,17 * * *Tweemaal per dag, om 09:00 en 17:00
*/15 9-17 * * 1-5Elk kwartier tijdens kantooruren op werkdagen
0 8 * * 1-5Op werkdagen om 08:00
0 10 * * 6,0Zaterdag en zondag om 10:00
30 7 * * MONMaandagen om 07:30
0 0 1 * *Middernacht op eerste van elke maand
0 0 28-31 * *Elke dag in het laatste gedeelte van maandStandaard cron kent geen 'laatste dag van maand'. Dit voert tot vier keer uit; een script dat datum controleert en vroeg afsluit is gebruikelijk.
0 0 1 1,4,7,10 *Middernacht op eerste dag van elk kwartaal
0 0 1 1 *Eenmaal per jaar, op begin van 1 januari

Extensies die deze site niet accepteert

6

Quartz, Jenkins en cloud schedulers voegen deze toe. Ze staan hier zodat je ze in andermans crontab herkent — de parser hier weigert elk ervan, net als cron geleverd met Linux.

ExpressieBereikBetekenis
?"Geen specifieke waarde", in het dagveld dat de ander al beperkt
LLaatste dag van maand, of laatste gegeven weekdag
15WWerkdag dichtst bij 15e
FRI#3Derde vrijdag van maand
*/30 * * * * *Zesde veld voor seconden, aan voorkantZes velden, niet vijf. Quartz en verschillende taalbiblioteken gebruiken dit formaat; crontab-bestand niet.
@rebootVoer eenmaal uit bij machinestartEcht in crontab, maar het is geen schema — er is geen volgende run om te berekenen, daarom weigert de parser hier het.

FAQ

Waarom voerde mijn 'vrijdag 13' taak op elke vrijdag uit?
Omdat wanneer zowel dag-van-maand als dag-van-week velden beperkt zijn, cron deze als een-of behandelt in plaats van en-zowel. 0 5 13 * 5 voert uit op 13e en op elke vrijdag. Een echte vrijdag 13e taak vereist een datumcontrole in het script zelf.
Betekent */5 'vijf minuten van nu af aan'?
Nee. Stappen tellen van het begin van het veldbereik, niet van het moment je de taak installeert, dus */5 in het minutenveld betekent :00, :05, :10 enzovoort ongeacht wanneer het geschreven is.
Welke tijdzone gebruikt cron?
De systeem-tijdzone, tenzij crontab CRON_TZ of TZ bovenaan instelt. Dit is twee keer per jaar van belang: een taak gepland in het uur dat zomertijdverandering overslaat voert niet uit, en een in het uur dat zich herhaalt voert mogelijk twee keer uit.
Is 0 hetzelfde als 7 in het dag-van-weekveld?
Ja, beide betekenen zondag. Het duplicaat bestaat zodat een bereik zoals 1-7 van maandag tot zondag natuurlijk geschreven kan worden, wat een 0-6 veld in één bereik niet kan uitdrukken.
Waar kan ik een expressie testen?
De cron-parser op deze site accepteert een expressie en toont volgende uitvoeringen in gewone taal, lokaal in je browser. De builder ernaast gaat de andere kant op: kies een schema en het schrijft de expressie.