Cum citești o expresie cron, câmp cu câmp
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.
Cele cinci câmpuri
| Câmp | Valori permise | Exemplu |
|---|---|---|
| Minut | 0 până la 59 | 30 este minutul 30 al orei |
| Oră | 0 până la 23 | 9 este 09:00, în format de 24 de ore |
| Ziua din lună | 1 până la 31 | 15 este ziua a 15-a |
| Luna | 1 până la 12, sau JAN până la DEC | 3 sau MAR este martie |
| Ziua din săptămână | 0 până la 6, sau SUN până la SAT | 0 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-5 | 09: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 * * 0 | Miezul nopții în fiecare duminică |
0 0 1 1 * | Miezul nopții de 1 ianuarie |
/5 9-17 * 1-5 | La 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, iar6Lîn câmpul zilei din săptămână este ultima vineri.Wînseamnă cea mai apropiată zi lucrătoare.15Weste 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#3este 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.


