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
7Een 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.
| Expressie | Bereik | Betekenis |
|---|---|---|
| * * * * * | min hod dom mes dow | De vijf velden in volgorde: minuut, uur, dag van maand, maand, dag van weekVijf sterren betekenen elke minuut van elke dag — de los mogelijke expressie. |
| minute | 0-59 | Eerste veld |
| hour | 0-23 | Tweede veld, op 24-uursbasis |
| day of month | 1-31 | Derde veldEen dag die niet in een bepaalde maand bestaat wordt eenvoudig overgeslagen — 31 voert zeven keer per jaar uit, niet twaalf. |
| month | 1-12 | Vierde veld |
| day of week | 0-7 | Vijfde veld, zondag eerstZowel 0 als 7 betekenen zondag, daarom loopt het bereik tot zeven in plaats van zes. |
| 0 5 13 * 5 | Wanneer 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
10Dezelfde vier operatoren werken in elk veld; alleen de getallen die zij accepteren veranderen.
| Expressie | Bereik | Betekenis |
|---|---|---|
| * | Elke waarde die het veld toestaat | |
| 1,15,30 | Een lijst van individuele waarden | |
| 9-17 | Een inclusief bereik | |
| */15 | Elke 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/2 | Elke n-de waarde in een bereik | |
| 5/10 | Elke n-de waarde van beginpunt tot veldende | |
| 0,30 9-17 * * 1-5 | Operatoren combineren vrij, in elk veldElk half uur, tussen 9 en 17, maandag tot vrijdag. | |
| JAN-DEC | 1-12 | Maandnamen, drie letters, niet-hoofdlettergevoelig |
| SUN-SAT | 0-6 | Dagnamen, drie letters, niet-hoofdlettergevoelig |
| 7 | 0 | Zondag, anders geschreven |
Snelkoppelingen
7Zeven 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.
| Expressie | Bereik | Betekenis |
|---|---|---|
| @hourly | 0 * * * * | Op het hoogtepunt van elk uur |
| @daily | 0 0 * * * | Eenmaal per dag om middernacht |
| @midnight | 0 0 * * * | Hetzelfde als @daily |
| @weekly | 0 0 * * 0 | Eenmaal per week, zondag om middernacht |
| @monthly | 0 0 1 * * | De eerste van de maand om middernacht |
| @yearly | 0 0 1 1 * | De eerste van januari om middernacht |
| @annually | 0 0 1 1 * | Hetzelfde als @yearly |
Gemaakte voorbeelden
14Lees 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.
| Expressie | Bereik | Betekenis |
|---|---|---|
| * * * * * | 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-5 | Elk kwartier tijdens kantooruren op werkdagen | |
| 0 8 * * 1-5 | Op werkdagen om 08:00 | |
| 0 10 * * 6,0 | Zaterdag en zondag om 10:00 | |
| 30 7 * * MON | Maandagen 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
6Quartz, 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.
| Expressie | Bereik | Betekenis |
|---|---|---|
| ? | "Geen specifieke waarde", in het dagveld dat de ander al beperkt | |
| L | Laatste dag van maand, of laatste gegeven weekdag | |
| 15W | Werkdag dichtst bij 15e | |
| FRI#3 | Derde vrijdag van maand | |
| */30 * * * * * | Zesde veld voor seconden, aan voorkantZes velden, niet vijf. Quartz en verschillende taalbiblioteken gebruiken dit formaat; crontab-bestand niet. | |
| @reboot | Voer 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. |