Utilia

Generátor výrazov cron

Zostav výraz cron po poliach, prečítaj si ho jednoducho, zobraz najbližšie spustenia v ľubovoľnom časovom pásme a preveď ho do formátu systemd, Quartz či AWS.

Zostavovač

PoleRežimHodnota
Minúta0–59
Hodina0–23
Deň v mesiaci1–31, L
Mesiac1–12 alebo JAN–DEC
Deň v týždni0–7 (0 a 7 = nedeľa) alebo SUN–SAT

Ako vytvoriť výraz cron

  1. Napíš alebo vlož výraz do Výraz cron, alebo ho vyber z Predvoľby. Akceptujú sa aj makrá ako @daily či @weekly.
  2. Alebo použi Zostavovač: pri každom poli vyber Režim (Každý, Každých N, Konkrétne hodnoty, Rozsah alebo Vlastné) a vyplň Hodnota. Výraz sa priebežne aktualizuje a úprava výrazu zase aktualizuje zostavovač.
  3. Zaškrtni Pridať pole sekúnd (6 polí), ak tvoj plánovač podporuje sekundy.
  4. Prečítaj si plán v sekcii Jednoducho povedané (v jazyku stránky, ak to knižnica na opis podporuje, inak po anglicky) a potom skontroluj zoznam Najbližšie spustenia. Vyber Časové pásmo servera, ktorý úlohu spúšťa, a Koľko spustení sa má vypísať.
  5. Výraz skopíruj tlačidlom Kopírovať, alebo použi niektorý z Iné formáty.

Chyby sa vysvetľujú po poliach, napríklad „Minúta: 61 je mimo rozsahu (0–59)“, takže presne vieš, čo opraviť.

Päť polí cron

Štandardný riadok cron (Vixie) má päť polí a potom príkaz:

Pole Povolené hodnoty
Minúta 0–59
Hodina 0–23
Deň v mesiaci 1–31
Mesiac 1–12 alebo JAN–DEC
Deň v týždni 0–7 (0 a 7 sú nedeľa) alebo SUN–SAT

Každé pole prijíma * (každú hodnotu), zoznam 1,15, rozsah 9-17, krok */15 (každých 15 jednotiek) alebo rozsah s krokom 0-30/10. Takže */15 9-17 * * 1-5 znamená každých 15 minút od 9:00 do 17:45, od pondelka do piatka.

Jedno pravidlo mnohých prekvapí: keď sú obmedzené Deň v mesiaci aj Deň v týždni, klasický cron sa spustí, keď sa zhoduje ktorékoľvek z nich. 0 0 13 * 5 sa spustí každého 13. aj každý piatok, nielen v piatok trinásteho. V takom prípade nástroj zobrazí upozornenie.

Najbližšie spustenia a časové pásma

Cron používa hodiny stroja, prípadne nastavenie CRON_TZ/TZ v crontabe. Zoznam Najbližšie spustenia sa počíta pre zvolené časové pásmo vrátane prechodu na letný čas: pri jarnej zmene sa úloha nastavená na 2:30 môže preskočiť a na jeseň sa podľa implementácie môže spustiť raz alebo dvakrát. Pri úlohách, ktoré sa musia spustiť presne raz, uprednostni časy mimo 1:00–3:00 alebo použi UTC.

Cron Vixie, časovače systemd, Quartz a AWS

  • Časovače systemd používajú OnCalendar= s inou syntaxou: Mon..Fri *-*-* 09..17:00/15:00. Podmienky dňa v týždni a dátumu sa spájajú operátorom AND, nie OR, takže niektoré výrazy cron nemajú presný ekvivalent.
  • Quartz a Spring dávajú pole sekúnd na začiatok a môžu pridať pole roka. Jedno z dvoch polí dňa musí byť ? a Quartz čísluje dni v týždni 1–7 od nedele, na rozdiel od cronu s 0–6. Nástroj preto zapisuje dni v týždni ako názvy (MON-FRI), aby sa tejto pasci vyhol.
  • AWS EventBridge používa cron(minutes hours day month weekday year): šesť polí, bez sekúnd, so ? v jednom z polí dňa a rokom na konci.

Štandardný cron nemá pole sekúnd. Šesťpoľová forma so sekundami je podporovaná v mnohých knižniciach (node-cron, Spring, Quartz), no nie v systémovom crontabe.

Často kladené otázky

Ako spustím úlohu každých 5 minút?

Použi */5 * * * *. Úloha sa spustí v minútach 0, 5, 10… každej hodiny.

Ako spustím úlohu v posledný deň mesiaca?

Mnohé plánovače akceptujú L v poli dňa v mesiaci: 0 18 L * *. V čistom cron Vixie spúšťaj úlohu denne v dňoch 28–31 a v skripte over, či je zajtra 1.

Čo robí @reboot?

Spustí príkaz raz, pri štarte démona cron. Nemá žiadny plán, takže nástroj preň nevie vypísať časy spustenia.

Prečo sa moja úloha nespúšťa v zobrazenom čase?

Skontroluj časové pásmo servera, crontab používateľa oproti /etc/crontab (ktorý má pole navyše pre používateľa) a premennú PATH: cron štartuje s minimálnym prostredím.

Je nedeľa 0 alebo 7?

Obe. V poli dňa v týždni 0 aj 7 znamenajú nedeľu, 1 je pondelok a 6 je sobota.