Hoe lees je een cron-expressie, veld voor veld
Een cron-expressie is een korte regel tekst die een scheduler vertelt wanneer een taak moet draaien. De gebruikelijke vorm heeft vijf velden, gescheiden door spaties: minuut, uur, dag van de maand, maand en dag van de week. De regel 0 9 * * 1-5 betekent 09:00 uur, van maandag tot en met vrijdag. Elk veld is een getal, een naam, een lijst, een bereik of een stap, of * voor elke waarde, en een taak draait op elk moment waarop alle velden overeenkomen.
De vijf velden
| Veld | Toegestane waarden | Voorbeeld |
|---|---|---|
| Minuut | 0 tot en met 59 | 30 is minuut 30 van het uur |
| Uur | 0 tot en met 23 | 9 is 09:00, op een 24-uursklok |
| Dag van de maand | 1 tot en met 31 | 15 is de 15e |
| Maand | 1 tot en met 12, of JAN tot en met DEC | 3 of MAR is maart |
| Dag van de week | 0 tot en met 6, of SUN tot en met SAT | 0 of SUN is zondag, 1 is maandag |
Sommige systemen accepteren ook 7 voor zondag, maar niet allemaal, dus gebruik 0 of SUN. Cron heeft in deze vorm geen veld voor seconden, dus de kleinste stap is één minuut.
Lijsten, bereiken, stappen en namen
betekent elke waarde in het veld.* * * *draait elke minuut.- Een lijst gebruikt komma's.
0 9,17 * * *draait elke dag om 09:00 en om 17:00 uur. - Een bereik gebruikt een koppelteken.
1-5in het veld voor de dag van de week betekent maandag tot en met vrijdag. - Een stap gebruikt een schuine streep.
*/15in het minutenveld betekent 0, 15, 30 en 45.10-30/5betekent 10, 15, 20, 25 en 30. - Namen zoals
MON-FRIkunnen getallen vervangen. Ze zijn makkelijker te lezen, als je scheduler ze accepteert.
Deze onderdelen kun je combineren. 0 8-18/2 * * * draait op minuut 0 van elk tweede uur, van 08:00 tot en met 18:00 uur.
Veelvoorkomende schema's
| Expressie | Betekenis |
|---|---|
* * * * * | Elke minuut |
/15 * * * | Elke 15 minuten |
0 * * * * | Op minuut 0 van elk uur |
0 2 * * * | Elke dag om 02:00 uur |
0 9 * * 1-5 | 09:00 uur, maandag tot en met vrijdag |
0 9,17 * * * | 09:00 en 17:00 uur, elke dag |
30 6 1 * * | 06:30 uur op de 1e van elke maand |
0 0 * * 0 | Middernacht elke zondag |
0 0 1 1 * | Middernacht op 1 januari |
/5 9-17 * 1-5 | Elke 5 minuten van 09:00 tot 17:55 uur, maandag tot en met vrijdag |
Let op: 0 0 * * is middernacht, en 0 12 * * is 12:00 uur, het middaguur. Het verkeerde uur kiezen is een van de meest voorkomende fouten.
Dag van de maand en dag van de week
Als zowel het veld voor de dag van de maand als het veld voor de dag van de week beperkt is, draait de taak wanneer een van beide overeenkomt. Dit is de klassieke regel in Vixie cron en veel systemen die daarvan zijn afgeleid. 0 0 13 * 5 draait dus om middernacht op de 13e van elke maand, en ook elke vrijdag. Mensen verwachten vaak alleen vrijdag de 13e, en krijgen dan meer runs dan ze gepland hadden.
Als een van de twee velden * is, telt alleen het andere veld. Wil je draaien op vrijdag de 13e, plan dan een taak voor elke vrijdag en controleer de datum in het script. Andere schedulers, waaronder sommige cloudservices, gebruiken mogelijk andere regels, dus lees hun documentatie.
Tijdzones en zomertijd
Cron draait op de klok van de machine of service waarop het draait, en dat is meestal de lokale tijdzone van die machine. Een taak ingesteld op 02:30 uur draait om 02:30 uur op die klok. Controleer eerst de zone (op Linux laat date die zien). Wil je dat taken overal dezelfde klok volgen, dan draaien veel teams servers in UTC, en sommige schedulers laten je per taak een tijdzone instellen.
Zomertijd verzet de klok twee keer per jaar. In het voorjaar springt de klok op veel plaatsen direct van 02:00 naar 03:00 uur, dus een taak om 02:30 uur heeft geen tijd om te draaien. In het najaar komt het uur van 01:00 tot 01:59 uur twee keer voor. Schedulers gaan hier verschillend mee om. Sommige slaan de taak over, sommige draaien hem eenmaal, en sommige draaien hem twee keer. Houd taken buiten het vroege ochtendmoment van de klokwijziging, of gebruik UTC, als het verschil voor jou belangrijk is.
Zes velden en Quartz
Sommige schedulers voegen vooraan een veld voor seconden toe, dus /10 * * * * draait elke 10 seconden. De Quartz-scheduler voor Java gebruikt seconden, minuten, uren, dag van de maand, maand, dag van de week en een optioneel jaar, en voegt vier speciale tekens toe:
?betekent "geen specifieke waarde". Quartz vereist het in het veld voor de dag van de maand of in het veld voor de dag van de week, welk van de twee je niet instelt.Lbetekent laatste.Lin het veld voor de dag van de maand is de laatste dag van de maand, en6Lin het veld voor de dag van de week is de laatste vrijdag.Wbetekent de dichtstbijzijnde werkdag.15Wis de werkdag die het dichtst bij de 15e ligt, en die springt niet naar een andere maand.#betekent de n-de weekdag.6#3is de derde vrijdag.
Quartz telt de dagen anders dan de vijfveldvorm. Zijn 1 is zondag en 7 is zaterdag, dus maandag tot en met vrijdag is 2-6, niet 1-5. Controleer altijd welk formaat je scheduler gebruikt voordat je een regel kopieert.
Veelgemaakte fouten
*/7in het minutenveld. De waarden zijn 0, 7, 14 enzovoort, tot en met 56. De volgende zou 63 zijn, die bestaat niet, dus de run na 56 is op minuut 0 van het volgende uur. Het gat is maar vier minuten, en de tussenruimte is ongelijk. Gebruik een stap die 60 gelijkmatig deelt, zoals 5, 10, 15 of 30.- 30 februari. Die datum bestaat niet, dus
0 0 30 2 *draait nooit. Hetzelfde geldt voor de 31e in een maand van 30 dagen. Door de of-regel kan een beperking op de dag van de week toch runs op andere dagen veroorzaken, dus controleer het resultaat. - Uur 24 of minuut 60. Die vallen buiten het bereik. De meeste schedulers weigeren ze bij opslaan, maar niet alle.
- Seconden verwachten. Een regel met vijf velden draait alleen op hele minuten.
- Cron verwarren met reguliere expressies. In cron betekent
elke waarde. In een reguliere expressie betekentdat het item ervoor zich herhaalt. Gebruik de regex-tester voor patronen, en houd cron-regels apart.
Controleer de volgende runs
Lees voordat je op een schema vertrouwt de regel in gewone woorden, en laat de eerstvolgende runtijden zien. De cron-uitlegger doet beide, en dat is de snelste manier om de of-regel of een vreemde stap te ontdekken.
Snelle antwoorden
Is het eerste veld minuten of seconden?
Minuten, in de standaardvorm met vijf velden. Alleen sommige schedulers met zes velden voegen seconden toe, en die zetten ze vooraan.
Waarom draait mijn taak op vrijdag en ook op de 13e?
Het veld voor de dag van de maand en het veld voor de dag van de week zijn allebei ingesteld, dus de taak draait wanneer een van beide overeenkomt. Zet één veld op * als je alleen het andere wilt.
Gebruikt cron UTC?
Alleen als de machine of service op UTC staat. Anders gebruikt het de lokale tijdzone van dat systeem.
Vertaald uit de Engels origineel met hulp van AI.
Reacties
Nog geen reacties. Wees de eerste.


