Hogyan olvasd a cron-kifejezést mezőről mezőre?
A cron-kifejezés egy rövid szöveges sor, amely megmondja az ütemezőnek, mikor fusson egy feladat. A szokásos forma öt mezőből áll, szóközökkel elválasztva: perc, óra, hónapnap, hónap és hétnap. A 0 9 * * 1-5 sor hétfőtől péntekig, reggel 09:00-t jelent. Minden mező lehet szám, név, lista, tartomány vagy lépésköz, illetve *, ami minden értéket jelent. A feladat pedig azokon az időpontokon fut, ahol minden mező egyezik.
Az öt mező
| Mező | Megengedett értékek | Példa |
|---|---|---|
| Perc | 0-tól 59-ig | 30 az óra 30. perce |
| Óra | 0-tól 23-ig | 9 09:00, 24 órás órabeosztás szerint |
| Hónapnap | 1-től 31-ig | 15 a 15. nap |
| Hónap | 1-től 12-ig, vagy JAN-tól DEC-ig | 3 vagy MAR március |
| Hétnap | 0-tól 6-ig, vagy SUN-tól SAT-ig | 0 vagy SUN vasárnap, 1 hétfő |
Egyes rendszerek a 7-et is elfogadják vasárnapnak, de nem mindegyik, ezért inkább 0-t vagy SUN-t használj. Ebben a formában a cronnak nincs másodperc mezője, így a legkisebb lépésköz egy perc.
Listák, tartományok, lépésközök és nevek
a mező minden értékét jelenti.* * * *percenként fut.- Lista vesszővel készül.
0 9,17 * * *naponta 09:00-kor és 17:00-kor fut. - Tartomány kötőjellel készül. A hétnap mezőben az
1-5hétfőtől péntekig tart. - Lépésköz perjellel készül. A perc mezőben a
*/15a 0, 15, 30 és 45 perceket jelenti. A10-30/5a 10, 15, 20, 25 és 30 perceket. - Nevek, például
MON-FRI, helyettesíthetik a számokat. Könnyebben olvashatók, ha az ütemező elfogadja őket.
Ezek a részek kombinálhatók. A 0 8-18/2 * * * minden második órában, 08:00 és 18:00 között, az óra 0. percében fut.
Gyakori ütemezések
| Kifejezés | Jelentés |
|---|---|
* * * * * | Percenként |
/15 * * * | 15 percenként |
0 * * * * | Minden óra 0. percében |
0 2 * * * | Minden nap 02:00-kor |
0 9 * * 1-5 | 09:00, hétfőtől péntekig |
0 9,17 * * * | 09:00-kor és 17:00-kor minden nap |
30 6 1 * * | 06:30 minden hónap 1-jén |
0 0 * * 0 | Éjfél minden vasárnap |
0 0 1 1 * | Éjfél január 1-jén |
/5 9-17 * 1-5 | 5 percenként 09:00-tól 17:55-ig, hétfőtől péntekig |
Figyelj rá, hogy a 0 0 * * éjfél, a 0 12 * * pedig dél. Az óra rossz megadása az egyik leggyakoribb hiba.
Hónapnap és hétnap
Ha a hónapnap és a hétnap mezőben is van megkötés, a feladat akkor fut, ha bármelyik egyezik. Ez a klasszikus szabály a Vixie cronban és sok belőle származó rendszerben. Így a 0 0 13 * 5 minden hónap 13-án éjfélkor fut, és minden pénteken is. Sokan csak a péntek 13-i futásra számítanak, és a tervezettnél több futást kapnak.
Ha a két mező közül az egyik *, csak a másik számít. Ha csak péntek 13-án akarod futtatni, ütemezz minden péntekre egy feladatot, és a scriptben ellenőrizd a dátumot. Más ütemezők, köztük egyes felhőszolgáltatások, eltérő szabályt használhatnak, ezért olvasd el a dokumentációjukat.
Időzónák és nyári időszámítás
A cron annak a gépnek vagy szolgáltatásnak az órája szerint fut, amelyen fut, ami általában az adott gép helyi időzónája. A 02:30-ra beállított feladat az óra szerinti 02:30-kor fut. Először ellenőrizd az időzónát (Linuxon a date megmutatja). Ha azt szeretnéd, hogy a feladatok mindenhol ugyanazt az órát kövessék, sok csapat UTC-ben futtatja a szervereket. Néhány ütemező pedig lehetővé teszi, hogy minden feladathoz külön időzónát állíts be.
A nyári időszámítás évente kétszer változtatja az órát. Tavasszal sok helyen 02:00-ról egyenesen 03:00-ra ugrik az idő, így a 02:30-as feladatnak nincs ideje lefutni. Ősszel az 01:00 és 01:59 közötti óra kétszer fordul elő. Az ütemezők ezeket máshogy kezelik: van, amelyik kihagyja a feladatot, van, amelyik egyszer, van, amelyik kétszer futtatja. Ha számít a különbség, tartsd a feladatokat a kora reggeli átállási időablakon kívül, vagy használj UTC-t.
Hat mező és a Quartz
Egyes ütemezők elé másodperc mezőt tesznek, így a /10 * * * * 10 másodpercenként fut. A Java-hoz készült Quartz ütemező másodperc, perc, óra, hónapnap, hónap, hétnap és opcionális év mezőt használ, és négy speciális karaktert ad hozzá:
?jelentése: „nincs konkrét érték”. A Quartz megköveteli a hónapnap vagy a hétnap mezőben, attól függően, melyiket nem állítod be.Ljelentése: utolsó. A hónapnap mezőben azLa hónap utolsó napja, a hétnap mezőben a6Laz utolsó péntek.Wjelentése: legközelebbi hétköznap. A15Wa 15-höz legközelebbi hétköznap, és nem ugrik át másik hónapba.#jelentése: n-edik adott nap. A6#3a harmadik péntek.
A Quartz a napokat másképp számozza, mint az öt mezős forma. Az ő 1-e vasárnap, a 7 szombat, így a hétfőtől péntekig tartó időszak 2-6, nem 1-5. Mielőtt másol egy sort, mindig ellenőrizd, melyik formátumot használja az ütemeződ.
Gyakori hibák
*/7a perc mezőben. Az értékek 0, 7, 14 és így tovább, egészen 56-ig. A következő 63 lenne, de az nem létezik, ezért az 56 utáni futás a következő óra 0. percében lesz. A rés csak négy perc, és a köz egyenlőtlen. Olyan lépést használj, amely egyenletesen osztja a 60-at, például 5, 10, 15 vagy 30.- Február 30. Ilyen dátum nincs, ezért a
0 0 30 2 *soha nem fut. Ugyanez igaz a 31-ére olyan hónapban, amelynek 30 napja van. A VAGY-szabály alapján egy hétnapos megkötés más napokon is futást okozhat, ezért ellenőrizd az eredményt. - 24-es óra vagy 60-as perc. Ezek kívül esnek a tartományon. A legtöbb ütemező mentéskor elutasítja őket, de nem mindegyik.
- Másodperc várása. Az öt mezős sor csak egész percekben fut.
- A cron összetévesztése a reguláris kifejezésekkel. A cronban a
minden értéket jelent. Reguláris kifejezésben aazt jelenti, hogy az előtte álló elem ismétlődhet. A mintákhoz használd a regex tesztelőt, a cron-sorokat pedig tartsd külön.
Ellenőrizd a következő futásokat
Mielőtt megbíznál egy ütemezésben, olvasd el a sort közérthetően, és írd ki a következő néhány futási időpontját. A cron-kifejezés magyarázó mindkettőt elvégzi. Ez a leggyorsabb módja annak, hogy kiszúrd a VAGY-szabályt vagy egy furcsa lépésközt.
Gyors válaszok
Az első mező perc vagy másodperc?
Szabványos öt mezős formában perc. Csak egyes hat mezős ütemezők adnak hozzá másodpercet, és azok teszik elé.
Miért fut a feladatom pénteken és a 13-án is?
A hónapnap és a hétnap mező is be van állítva, ezért a feladat akkor fut, ha bármelyik egyezik. Ha csak az egyikre van szükséged, a másikat állítsd *-ra.
A cron UTC-t használ?
Csak akkor, ha a gép vagy a szolgáltatás UTC-re van állítva. Egyébként annak a rendszernek a helyi időzónáját használja.
A Angol eredeti alapján, MI segítségével fordítva.
Hozzászólások
Még nincs hozzászólás. Legyél te az első.


