fixmint
RO

Cum citești o expresie cron, câmp cu câmp

De · · 5 min de citit

O expresie cron este o linie scurtă de text care îi spune unui programator când să pornească o sarcină. Forma obișnuită are cinci câmpuri separate prin spații: minut, oră, ziua din lună, luna și ziua din săptămână. Linia 0 9 * * 1-5 înseamnă 09:00, de luni până vineri. Fiecare câmp este un număr, un nume, o listă, un interval sau un pas, sau * pentru toate valorile, iar o sarcină rulează în fiecare moment în care toate câmpurile se potrivesc.

Explicator expresii cronCron-ul rulează la ora greșităÎncearcă gratuit

Cele cinci câmpuri

CâmpValori permiseExemplu
Minut0 până la 5930 este minutul 30 al orei
Oră0 până la 239 este 09:00, în format de 24 de ore
Ziua din lună1 până la 3115 este ziua a 15-a
Luna1 până la 12, sau JAN până la DEC3 sau MAR este martie
Ziua din săptămână0 până la 6, sau SUN până la SAT0 sau SUN este duminică, 1 este luni

Unele sisteme acceptă și 7 pentru duminică, dar nu toate, așa că folosește 0 sau SUN. Cron nu are în această formă un câmp pentru secunde, deci cel mai mic pas este de un minut.

Liste, intervale, pași și nume

  • înseamnă fiecare valoare din câmp. * * * * rulează în fiecare minut.
  • O listă folosește virgule. 0 9,17 * * * rulează la 09:00 și la 17:00, în fiecare zi.
  • Un interval folosește liniuța. 1-5 în câmpul zilei din săptămână înseamnă de la luni până vineri.
  • Un pas folosește bara oblică. */15 în câmpul minutului înseamnă 0, 15, 30 și 45. 10-30/5 înseamnă 10, 15, 20, 25 și 30.
  • Numele, precum MON-FRI, pot înlocui numerele. Sunt mai ușor de citit, dacă programatorul le acceptă.

Aceste părți se pot combina. 0 8-18/2 * * * rulează la minutul 0 din fiecare a doua oră, de la 08:00 la 18:00.

Programări frecvente

ExpresieÎnseamnă
* * * * *În fiecare minut
/15 * * *La fiecare 15 minute
0 * * * *La minutul 0 din fiecare oră
0 2 * * *În fiecare zi la 02:00
0 9 * * 1-509:00, de luni până vineri
0 9,17 * * *09:00 și 17:00 în fiecare zi
30 6 1 * *06:30 în prima zi a fiecărei luni
0 0 * * 0Miezul nopții în fiecare duminică
0 0 1 1 *Miezul nopții de 1 ianuarie
/5 9-17 * 1-5La fiecare 5 minute, de la 09:00 până la 17:55, de luni până vineri

Ține minte că 0 0 * * este miezul nopții, iar 0 12 * * este amiaza. Greșeala de oră este una dintre cele mai frecvente erori.

Ziua din lună și ziua din săptămână

Când atât câmpul zilei din lună, cât și cel al zilei din săptămână sunt restricționate, sarcina rulează când se potrivește oricare dintre ele. Aceasta este regula clasică din Vixie cron și din multe sisteme derivate din el. Deci 0 0 13 * 5 rulează la miezul nopții în ziua a 13-a a fiecărei luni și, de asemenea, în fiecare vineri. Oamenii se așteaptă adesea ca sarcina să ruleze doar vinerea a 13-a și ajung la mai multe rulări decât și-au propus.

Dacă unul dintre cele două câmpuri este *, contează doar celălalt. Ca să rulezi doar vinerea a 13-a, programează o sarcină pentru fiecare vineri și verifică data în interiorul scriptului. Alți programatori, inclusiv unele servicii cloud, pot folosi reguli diferite, așa că citește documentația lor.

Fusuri orare și ora de vară

Cron rulează după ceasul mașinii sau al serviciului pe care rulează, care este de obicei fusul orar local al acelei mașini. O sarcină setată pentru 02:30 rulează la 02:30 pe acel ceas. Verifică mai întâi fusul orar (pe Linux, date îl afișează). Dacă vrei ca sarcinile să urmeze același ceas peste tot, multe echipe rulează serverele în UTC, iar unii programatori îți permit să setezi un fus orar pentru fiecare sarcină.

Ora de vară schimbă ceasul de două ori pe an. Primăvara, multe locuri trec direct de la 02:00 la 03:00, așa că o sarcină la 02:30 nu are moment în care să ruleze. Toamna, ora dintre 01:00 și 01:59 se întâmplă de două ori. Programatorii tratează aceste cazuri diferit. Unii sar peste sarcină, alții o rulează o dată, iar alții de două ori. Ține sarcinile în afara ferestrei de schimbare de dimineața devreme sau folosește UTC, dacă diferența contează pentru tine.

Șase câmpuri și Quartz

Unii programatori adaugă un câmp pentru secunde la început, deci /10 * * * * rulează la fiecare 10 secunde. Programatorul Quartz pentru Java folosește secunde, minute, ore, ziua din lună, luna, ziua din săptămână și un an opțional și adaugă patru caractere speciale:

  • ? înseamnă „nicio valoare specifică”. Quartz cere să apară fie în câmpul zilei din lună, fie în cel al zilei din săptămână, pe cel pe care nu-l setezi.
  • L înseamnă ultimul. L în câmpul zilei din lună este ultima zi a lunii, iar 6L în câmpul zilei din săptămână este ultima vineri.
  • W înseamnă cea mai apropiată zi lucrătoare. 15W este ziua lucrătoare cea mai apropiată de ziua a 15-a și nu trece într-o altă lună.
  • # înseamnă a n-a zi din săptămână. 6#3 este a treia vineri.

Quartz numerotează zilele altfel decât forma cu cinci câmpuri. 1 înseamnă duminică și 7 sâmbătă, deci de luni până vineri este 2-6, nu 1-5. Verifică întotdeauna ce format folosește programatorul tău înainte de a copia o linie.

Greșeli frecvente

  • */7 în câmpul minutului. Valorile sunt 0, 7, 14 și așa mai departe, până la 56. Următoarea ar fi 63, care nu există, deci rularea după 56 este la minutul 0 din ora următoare. Diferența este doar de patru minute, iar distanțele sunt inegale. Folosește un pas care împarte exact 60, precum 5, 10, 15 sau 30.
  • 30 februarie. Nu există o astfel de dată, deci 0 0 30 2 * nu rulează niciodată. Același lucru e valabil și pentru ziua a 31-a într-o lună cu 30 de zile. Conform regulii SAU, o restricție pe ziua din săptămână poate totuși face ca o rulare să aibă loc în alte zile, așa că verifică rezultatul.
  • Ora 24 sau minutul 60. Sunt în afara intervalului. Majoritatea programatorilor le resping la salvare, dar nu toți.
  • Să te aștepți la secunde. O linie cu cinci câmpuri rulează doar la minute întregi.
  • Confundarea cron cu expresiile regulate. În cron, înseamnă fiecare valoare. Într-o expresie regulată, înseamnă repetă elementul dinaintea lui. Folosește Testare expresii regulate pentru șabloane și păstrează liniile cron separate.

Verifică următoarele rulări

Înainte să te bazezi pe o programare, citește linia în cuvinte simple și notează următoarele câteva momente de rulare. Explicator expresii cron face ambele lucruri, iar aceasta este cea mai rapidă cale de a observa regula SAU sau un pas ciudat.

Răspunsuri rapide

Primul câmp este minutele sau secundele?

Minutele, în forma standard cu cinci câmpuri. Doar unii programatori cu șase câmpuri adaugă secunde, și le pun pe primul loc.

De ce rulează sarcina mea vinerea și și în ziua a 13-a?

Câmpurile zilei din lună și al zilei din săptămână sunt ambele setate, deci sarcina rulează când se potrivește oricare dintre ele. Setează unul dintre câmpuri la * dacă vrei doar celălalt.

Cron folosește UTC?

Doar dacă mașina sau serviciul este setat pe UTC. În caz contrar, folosește fusul orar local al acelui sistem.

Tradus din Original în engleză cu ajutorul AI.

Comentarii

    Încă nu sunt comentarii. Fii primul.

    Evaluarea ta (opțional)

    E-mailul tău nu este afișat și nu este păstrat niciodată.

    Copertă pentru Agentic AI in the BrowserAgentic AI in the Browser

    Cazuri de utilizare pentru fluxuri de lucru cu AI care pun confidențialitatea pe primul loc și rulează direct în browser: aceeași idee de a face totul pe dispozitivul tău, pe care se bazează și fixmint.

    $4.99Cumpără de pe GumroadÎn engleză