Cron-expressieparser

Opmaak: minuut uur dag van de maand maand dag van de week

U erft een crontab die vol staat met expressies als 0 */2 * * 1-5, 15 4 1 * * en */30 8-18 * * *. Deze parser neemt een standaard cron-expressie met 5 velden en geeft een beschrijving in eenvoudig Engels terug (‘every 2 hours on weekdays’), samen met de volgende 5 momenten waarop de taak daadwerkelijk wordt uitgevoerd. Handig om bestaande planningen te begrijpen en een nieuwe planning te controleren voordat u deze in productie zet.

Hoe u een cron-expressie verwerkt

  1. 1

    Plak de expressie

    Een standaard expressie met 5 velden (`* * * * *`): minuut, uur, dag van de maand, maand en dag van de week.

  2. 2

    Lees de beschrijving in het Engels

    De parser herschrijft elk veld in eenvoudig Engels, bijvoorbeeld "At minute 0, every 2 hours, on day(s) of week 1-5."

  3. 3

    Controleer de voorvertoning van de volgende uitvoering

    5 komende uitvoeringsmomenten. Als deze niet overeenkomen met uw bedoeling, verfijn dan de expressie.

  4. 4

    Corrigeer ongeldige velden

    Expressies met een verkeerd aantal velden of waarden buiten het bereik worden afgewezen met een fout die het probleemveld benoemt.

Decodering van elk veld

Elk veld heeft zijn eigen geldige bereik en speciale tekens:

Veld Bereik Ondersteunde jokertekens
Minuut 0-59 * , - /
Uur 0-23 * , - /
Dag van de maand 1-31 * , - /
Maand 1-12 * , - /
Dag van de week 0-7 * , - /
  • * = elke waarde (* in het minuutveld betekent elke minuut).
  • 1,5,10 = een lijst van waarden.
  • 1-5 = een bereik van waarden.
  • */15 of 0-45/15 = een stap, geteld vanaf het begin van het veldbereik.
  • De dagen van de week 0 en 7 zijn allebei zondag, dus beide conventies worden geaccepteerd. Namen van maanden en dagen zoals JAN of MON worden niet geaccepteerd; gebruik cijfers.

Voorbeelden ontcijferd

Expressie In het Engels
0 */2 * * 1-5 At minute 0 every 2 hours, Monday through Friday
15 4 1 * * At 04:15 on the 1st day of every month
*/30 8-18 * * * Every 30 minutes between 08:00 and 18:59
0 0 1,15 * * At midnight on the 1st and 15th of every month
0 22 * * 0 At 22:00 every Sunday

Wat de parser accepteert

  • Precies 5 velden: minuut, uur, dag van de maand, maand en dag van de week. Quartz-expressies met 6 of 7 velden (met seconden of jaar) worden afgewezen.
  • Geldige bereiken: elke waarde moet in zijn veld passen, bijvoorbeeld minuut 0-59, uur 0-23, dag van de maand 1-31, maand 1-12 en dag van de week 0-7.
  • Positieve stappen: de waarde na / moet een positief getal zijn (*/0 wordt afgewezen).
  • Geen benoemde snelkoppelingen: @daily, @reboot en vergelijkbare snelkoppelingen worden niet geaccepteerd. Breid ze eerst uit naar hun vorm met 5 velden (bijvoorbeeld @daily = 0 0 * * *).

Dag van de maand en dag van de week gecombineerd

Wanneer zowel de dag van de maand als de dag van de week zijn ingesteld, plant deze parser een uitvoering alleen als beide overeenkomen: 0 0 1 * MON vuurt dus alleen wanneer de 1e een maandag is. De meeste Linux-cron-implementaties behandelen de twee velden daarentegen als OF (de taak draait wanneer een van beide overeenkomt). Controleer de expressie daarom tegen de scheduler die u werkelijk gebruikt.

Opmerking over de tijdzone

De tijden in de voorvertoning worden berekend met de klok van de server, die in UTC draait. Als uw crontab op een machine met een andere tijdzone draait, kunnen de hier getoonde tijden afwijken van die op die machine.

Veelgestelde vragen

Nee. Alleen standaard expressies met 5 velden worden geaccepteerd. Quartz-expressies met seconden (6 velden) of met jaar (7 velden) worden afgewezen met een fout.

Meestal door een van deze redenen: de voorvertoning gebruikt de serverklok in UTC terwijl uw crontab in een andere tijdzone draait; zowel de dag van de maand als de dag van de week is ingesteld (deze parser vereist dat beide overeenkomen); of een stap die aan het begin van elk uur of elke dag opnieuw begint.

Ja, als het een standaard expressie met 5 velden is, wat Kubernetes gebruikt (standaard UTC). Houd er rekening mee dat de voorvertoning hier de serverklok in UTC gebruikt: als het cluster in een andere tijdzone draait, kunnen de tijden afwijken.

Linux-cron accepteert benoemde snelkoppelingen: @reboot (bij opstarten), @yearly / @annually (0 0 1 1 *), @monthly, @weekly, @daily, @hourly. Deze parser accepteert ze niet: breid de snelkoppeling eerst uit naar zijn equivalente expressie met 5 velden voordat u hem hier plakt.

Gerelateerde tools

Tool beschikbaar in andere talen