Sări la conținut

Sintaxa expresiilor cron

O expresie cron este cinci câmpuri care descriu când ceva ar trebui să se execute. Fiecare câmp spune care valori ale unității sale sunt acceptabile, iar jobul se declanșează la fiecare minut în care toți cinci sunt de acord. Acesta este modelul complet: nu există noțiune de durată, nu există "la fiecare 90 de minute" și nu se păstrează nicăieri o stare de următoare execuție.

Câmpurile sunt citite de la stânga la dreapta ca minut, oră, ziua lunii, luna, ziua săptămânii. Exemplele de mai jos sunt cele pe care oamenii cu adevărat le ating, și fiecare este parsată de parserul cron al acestui site însuși înainte ca această pagină să fie construită.

Secțiunea finală listează sintaxa care arată ca cron dar nu este acceptată aici: extensii Quartz și Jenkins, și forma cu șase câmpuri cu secunde. Merită să le recunoașteți, pentru că o expresie copiată care folosește una va eșua pur și simplu.

Cinci câmpuri

7

O linie cron constă din cinci câmpuri separate prin spații, apoi comanda. Fiecare câmp trebuie să fie prezent; nu există nicio modalitate de a omite unu.

ExpresieIntervalSemnificație
* * * * *min hod dom mes dowCinci câmpuri în ordine: minut, oră, ziua lunii, luna, ziua săptămâniiCinci asteriscuri înseamnă fiecare minut din fiecare zi — expresia cea mai relaxată.
minute0-59Primul câmp
hour0-23Al doilea câmp, pe o ceas de 24 de ore
day of month1-31Al treilea câmpO zi care nu există într-o lună dată este pur și simplu omisă — 31 se execută de șapte ori pe an, nu de doisprezece.
month1-12Al patrulea câmp
day of week0-7Al cincilea câmp, duminică pe primulAtât 0 cât și 7 înseamnă duminică, motiv pentru care intervalul merge la șapte mai degrabă decât la șase.
0 5 13 * 5Când ambele câmpuri de zi sunt restricționate, cron se execută pe oricare dintre ele — nu pe amândoiAceasta se execută pe 13 și pe fiecare vineri, deci nu este "vineri 13". Este singura regulă din cron care surprinde pe toată lumea.

Operatori

10

Aceiași patru operatori funcționează în fiecare câmp; se schimbă doar numerele pe care le acceptă.

ExpresieIntervalSemnificație
*Fiecare valoare pe care o permite câmpul
1,15,30O listă de valori individuale
9-17Un interval inclusiv
*/15Fiecare valoare de n pe tot câmpul*/15 în câmpul minut înseamnă :00, :15, :30 și :45 — se numără de la sfârșitul intervalului, nu de la acum.
9-17/2Fiecare valoare de n din interiorul unui interval
5/10Fiecare valoare de n de la un punct de start la sfârșitul câmpului
0,30 9-17 * * 1-5Operatorii se combină liber, în orice câmpÎn jumătate și sfertul de oră, între nouă și cinci, luni prin vineri.
JAN-DEC1-12Nazuri lunilor, trei litere, insensibil la caz
SUN-SAT0-6Nazuri zilelor, trei litere, insensibil la caz
70Duminică, scrisă pe cealaltă cale

Macrocomenzile prescurtate

7

Șapte nazuri care stau în locul unei expresii complete. Sunt o comoditate a formatului crontab mai degrabă decât a gramaticii câmpului, deci un planificator care citește stringurile cron nu le trebuie neapărat să le accepte.

ExpresieIntervalSemnificație
@hourly0 * * * *La vârful fiecărei ore
@daily0 0 * * *O dată pe zi la miezul nopții
@midnight0 0 * * *Același ca @daily
@weekly0 0 * * 0O dată pe săptămână, duminică la miezul nopții
@monthly0 0 1 * *Întâiul din lună la miezul nopții
@yearly0 0 1 1 *Întâiul ianuarie la miezul nopții
@annually0 0 1 1 *Același ca @yearly

Exemple lucrate

14

Citiți unu de la dreapta la stânga atunci când se termină să facă sens: câmpul cel mai grosolan este pe dreapta și decide care zile chiar primesc câmpurile mai fine consultate.

ExpresieIntervalSemnificație
* * * * *Fiecare minut
*/5 * * * *La fiecare cinci minute
0 * * * *Fiecare oră, pe ora
0,30 * * * *La fiecare jumătate de oră
0 3 * * *În fiecare zi la 03:00
0 9,17 * * *De două ori pe zi, la 09:00 și 17:00
*/15 9-17 * * 1-5La fiecare sfert de oră în orele de lucru zilele de lucru
0 8 * * 1-5Zilele de lucru la 08:00
0 10 * * 6,0Sâmbăți și duminici la 10:00
30 7 * * MONLunea la 07:30
0 0 1 * *Miezul nopții pe prima din fiecare lună
0 0 28-31 * *Fiecare zi în partea finală a luniiCron standard nu cunoaște "ziua finală a lunii". Aceasta se execută până la patru ori; o soluție obișnuită este un script care verifică data și iese devreme.
0 0 1 1,4,7,10 *Miezul nopții pe prima din fiecare trimestru
0 0 1 1 *O dată pe an, la începutul lunii ianuarie 1

Extensii care acest site nu acceptă

6

Quartz, Jenkins și unii planificatori cloud adaugă aceste. Sunt listate pentru a le recunoaște în crontab-ul altcuiva — parserul de pe acest site respinge fiecare unu, la fel ca cron livrat cu Linux.

ExpresieIntervalSemnificație
?"Nicio valoare specifică", în câmpul de zi pe care celălalt îl restricționează deja
LZiua finală a lunii, sau ziua finală dată în săptămână
15WZiua de lucru cea mai apropiată de 15
FRI#3Al treilea vineri din lună
*/30 * * * * *Un al șaselea câmp pentru secunde, în fațăȘase câmpuri, nu cinci. Quartz și mai multe biblioteci la nivel limbaj folosesc acest form; fișierul crontab nu.
@rebootExecută o dată la pornirea mașiniiReal în crontab, dar nu este un program — nu există o următoare execuție pentru a calcula, motiv pentru care parserul de aici o refuză.

FAQ

De ce jobul meu "vineri 13" s-a executat în fiecare vineri?
Pentru că atunci când ambele câmpuri de zi sunt restricționate, cron le tratează ca fie/sau mai degrabă decât și. 0 5 13 * 5 se execută pe 13 și pe fiecare vineri. Obținerea unui job autentic de vineri 13 necesită o verificare de dată în scriptul însuși.
Înseamnă */5 "în cinci minute de acum"?
Nu. Pașii se numără de la sfârșitul intervalului câmpului, nu din momentul în care instalați jobul, deci */5 în câmpul minut înseamnă :00, :05, :10 și așa mai departe indiferent de când a fost scris.
Ce fus orar folosește cron?
Cel al sistemului, cu excepția cazului în care crontab setează CRON_TZ sau TZ în partea de sus. Aceasta contează de două ori pe an: un job programat în ora pe care o schimbare de salvare a luminii o sare nu se execută, iar uno din ora care se repetă poate rula de două ori.
Este 0 același cu 7 în câmpul ziua săptămânii?
Da, ambele sunt duminică. Duplicatul există pentru ca un interval ca 1-7 acoperind luni prin duminică să poată fi scris în mod natural, ceea ce un câmp 0-6 nu poate exprima într-un singur interval.
Unde pot testa o expresie?
Parserul cron de pe acest site acceptă o expresie și arată următoarele execuții în limbaj simplu, local în browserul dvs. Constructorul de lângă el merge în cealaltă direcție: alegeți un program și scrie expresia.