fixmint
HU

Hogyan olvasd a cron-kifejezést mezőről mezőre?

Szerző: · · 5 perces olvasás

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.

Cron-kifejezés magyarázóA cron rossz időpontban futPróbáld ki ingyen

Az öt mező

MezőMegengedett értékekPélda
Perc0-tól 59-ig30 az óra 30. perce
Óra0-tól 23-ig9 09:00, 24 órás órabeosztás szerint
Hónapnap1-től 31-ig15 a 15. nap
Hónap1-től 12-ig, vagy JAN-tól DEC-ig3 vagy MAR március
Hétnap0-tól 6-ig, vagy SUN-tól SAT-ig0 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-5 hétfőtől péntekig tart.
  • Lépésköz perjellel készül. A perc mezőben a */15 a 0, 15, 30 és 45 perceket jelenti. A 10-30/5 a 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ésJelentés
* * * * *Percenként
/15 * * *15 percenként
0 * * * *Minden óra 0. percében
0 2 * * *Minden nap 02:00-kor
0 9 * * 1-509: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-55 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.
  • L jelentése: utolsó. A hónapnap mezőben az L a hónap utolsó napja, a hétnap mezőben a 6L az utolsó péntek.
  • W jelentése: legközelebbi hétköznap. A 15W a 15-höz legközelebbi hétköznap, és nem ugrik át másik hónapba.
  • # jelentése: n-edik adott nap. A 6#3 a 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

  • */7 a 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 a azt 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ő.

    Az értékelésed (nem kötelező)

    Az e-mail-címed sosem jelenik meg, és nem tároljuk.

    Agentic AI in the Browser borítójaAgentic AI in the Browser

    Használati esetek adatvédelemre épülő, böngészőben futó MI-munkafolyamatokhoz: ugyanaz az eszközön történő megoldás elv, amire a fixmint is épül.

    $4.99Megvásárlás a GumroadonAngolul