§

Adjon meg egy cron-kifejezést, vagy válasszon egy előre beállított lehetőséget alább.

Gyors előbeállítások:
§

Következő 10 futási idő

cron

Az emberek számára olvasható ütemezés itt jelenik meg...

    §

    Kifejezésépítő

    Az USA-ban és az Egyesült Királyságban dolgozó mérnökök a stack minden szintjén találkoznak a cron szintaxisával: az AWS EventBridge Scheduler elfogadja Lambda-triggerekhez, a Kubernetes CronJob erőforrások ugyanazt az ötmezős formát használják minden EKS- és GKE-fürtön, a GitHub Actions pedig közvetlenül a `.github/workflows/*.yml` fájlokból olvassa. A probléma az, hogy egyik platform sem ért egyet a részletekben. Az EventBridge hozzáad egy hatodik mezőt az évhez, és `?` jelet követel a `*` helyett az egyik napmezőben. A Kubernetes UTC-ben fut, hacsak nem állítja be kifejezetten a `spec.timeZone`-t. A GitHub Actions UTC-ben fut, kivétel nélkül, felülbírálás nélkül. Ez az eszköz elemzi bármelyik változatot, megjeleníti a következő tíz ütemezett időpontot az Ön által választott IANA időzónában, és lehetővé teszi egy új kifejezés mezőnkénti felépítését, hogy ellenőrizhesse az ütemezést, mielőtt éles környezetbe kerülne.

    Mi az a cron-kifejezés?

    A cron-kifejezés egy tömör ütemező sztring, amely pontosan megmondja egy feladatütemezőnek, hogy mikor kell elindítania egy feladatot. A formátum 1975-ben született a Unix V7 cron démonában, és azóta alig változott — ugyanaz az ötmezős nyelvtan jelenik meg ma a Kubernetes CronJob-okban, az AWS EventBridge-ben, a GitHub Actions munkafolyamatokban, a Google Cloud Schedulerben, a GitLab CI-ben, a Jenkins pipeline-okban és a crontab binárisban, amelyet minden Linux-disztribúció tartalmaz. A nyelvtan rengeteg jelentést sűrít körülbelül tizenhárom karakterbe, ezért egy elemző, amely átalakítja azt közérthető magyarázatra, a különbség a magabiztos telepítés és a hajnali 3-as visszaállítás között.

    Hogyan működik a cron-kifejezés?

    Egy szabványos cron-kifejezés öt szóközzel elválasztott mezőből áll, amelyek együtt egy ismétlődő ütemezést határoznak meg. A motor percenként ellenőrzi a pontos aktuális időt a kifejezés ellen, és elindítja a feladatot, ha mind az öt mező egyezik. A mezők balról jobbra:

    1. Perc (0–59). Az órán belül melyik percben indul a feladat. A 0 azt jelenti, hogy egész órakor, a 30 azt, hogy fél órakor, a */5 azt, hogy ötpercenként (00, 05, 10, ...), a 15,45 pedig azt, hogy negyedkor és háromnegyedkor.
    2. Óra (0–23). A nap melyik órájában a 24 órás óra szerint. A 0 éjfél, a 9 reggel 9, a 17 délután 5. A tartományok (9-17 a munkaidőre) és a lépésértékek (*/2 minden második órában) ugyanúgy működnek, mint a perceknél.
    3. Hónap napja (1–31). Melyik naptári napon fusson. A 1 a hónap 1. napját jelenti, a * minden napot, a 1,15 az 1. és a 15. napot. Legyen óvatos a 31-gyel — csendben átugorja azokat a hónapokat, amelyeknek nincs 31. napjuk.
    4. Hónap (1–12 vagy JAN–DEC). Melyik hónapokban fusson. A * minden hónapot jelent, a 1,7 a januárt és a júliust, a 1-3 csak az első negyedévet. A hárombetűs hónapnevek a legtöbb implementációban nem érzékenyek a kis- és nagybetűkre.
    5. Hét napja (0–7, ahol a 0 és a 7 is vasárnapot jelent). Korlátozza az indítást bizonyos hét napjaira. Az 1-5 hétfőtől péntekig, a 0,6 a hétvége, a MON-FRI a legtöbb elemzőben működik. Ha a hónap napja és a hét napja is egyedi értékre van állítva, a klasszikus cron mindkettő egyezésekor elindítja a feladatot (logikai VAGY), ami minden alkalommal meglepi az embereket.

    Miért használjunk cron-kifejezés elemzőt?

    • Fogja meg a csendes félreértést a telepítés előtt. A `0 2 */3 * *` kifejezés hajnali 2-kor indul minden harmadik napon, nem pedig hárompercenként — illessze be ide, és ezt közérthető magyarázatként látni fogja, mielőtt éles környezetbe kerülne.
    • A legtöbb felhőalapú ütemező alapértelmezés szerint UTC-ben fut. Ha előnézetben megtekinti a következő tíz futási időt a helyi időzónájában, azonnal észreveszi az egyórás nyári időszámítás eltérést, mielőtt az hajnali 3-kor riasztana valakit.
    • Az olyan rövidítések, mint a @daily, a @weekly és a @monthly, kényelmesek, de félreérthetőek. Az elemző megmutatja a mögöttes ötmezős formát, így pontosan tudja, mi lett ütemezve.
    • A mezőnkénti építő lehetővé teszi, hogy egy ütemezést egyszerre egy oszlopban állítson össze, miközben élőben figyeli az emberi leírás frissülését, ami sokkal gyorsabb, mint tizedikszerre is elolvasni a cron kézikönyvoldalát.

    Hol használnak cron-kifejezéseket?

    A cron szintaxis bárhol felbukkan, ahol egy feladatnak időzítés szerint kell ismétlődnie. Három a leggyakoribb felület a pontosan azzal a buktatóval, amelyről mindegyik híres:

    • Biztonsági mentési ütemezések. A klasszikus crontab -e bejegyzés, amely éjszakánként 2:00-kor dumpolja az adatbázist az S3-ba, vagy havonta az 1-jén forgatja a pg_dump archívumot. Egy olyan sor, mint 0 2 * * * /usr/local/bin/backup.sh, több Linux szerveren futott már, mint bármely más cron sor a történelemben. Ha jól állította be a percet és az órát, és a stderr-t valami tartós helyre irányította, akkor egy manuális ellenőrzőlistát cserélt le egy tűz-és-felejts parancsfájlra.
    • GitHub Actions schedule triggerek. A on.schedule.cron kulcs a `.github/workflows/*.yml` fájlban elfogadja a szabványos ötmezős cron-t, de a feladat mindig UTC-ben fut, és a GitHub csendben kihagy egy ütemezett időpontot, ha a futó sor zsúfolt. Gyakori minta: cron: '0 9 * * 1-5' hogy hétfőtől péntekig minden nap 9:00 UTC-kor küldjön egy összefoglalót. Tekintse meg először itt a helyi időzónájában, hogy ne ígérjen egy 9:00-as londoni összefoglalót, ami valójában 10:00-kor (BST) érkezik.
    • AWS EventBridge Scheduler. Az EventBridge cron-kifejezések hatodik mezőt vesznek fel az évhez, és ?-t követelnek a * helyett vagy a hónap napja, vagy a hét napja mezőben — a cron(0 9 ? * MON-FRI *) az EventBridge változata a klasszikus hétköznap 9:00-as cron-nak. Ütemezett Lambda-hívásokhoz, ECS-feladatfuttatásokhoz és Step Function állapotgép-indításokhoz használják; a klasszikus cron szintaxissal való eltérés a ValidationException hibák első számú forrása a CloudFormation telepítésekben.

    Hogyan néz ki egy valódi cron-kifejezés?

    Vegyük a 0 9 * * 1-5-öt — minden hétköznap 9:00-kor indul. A mezők balról jobbra olvasva: 0 a nulla perc az órában, 9 a 9 óra a 24 órás óra szerint, * a hónap napjánál minden naptári napot jelent, * a hónapnál minden hónapot, 1-5 a hét napjánál pedig hétfőtől péntekig korlátozza az indítást (ahol 1 = hétfő a szabványos cron számozásban). Illessze be a fenti bemenetbe, és az elemző megerősíti 09:00-kor, hétfőtől péntekig és a következő tíz ütemezett dátumot megjeleníti a kiválasztott IANA időzónában. Ugyanez a szándék az AWS EventBridge szintaxisában cron(0 9 ? * MON-FRI *) — figyelje meg az év mezőt a végén és a ?-t ahol a szabványos cron *-t használna. Ugyanez a szándék Quartz-kifejezésként (hatmezős vezető másodpercekkel) 0 0 9 ? * MON-FRI. Három különböző platform, három különböző felszíni forma, egy mögöttes ütemezés.

    A cron-kifejezések pontosan egyféleképpen könyörtelenek: egy elgépelés szintaktikailag érvényes ütemezést ad, amely rosszkor indul, és a kódellenőrzés során nem kap rá hibát. A `0 0 1 * *` olvasása és annak tudása, hogy minden hónap 1-jén éjfélkor fut, nem pedig január 1-jén, gyakorlást igényel. A fenti elemző ezt a gyakorlatot egy tíz másodperces ellenőrzéssé változtatja — illessze be a kifejezést, olvassa el a magyarázatot, nézze át a következő tíz futási időt a helyi időzónájában, és küldje el a YAML-t abban a tudatban, hogy a cron sor valóban azt csinálja, amit a commit üzenet mond.

    Mi a különbség az 5-mezős és a 6-mezős cron között?

    Az ötmezős cron a klasszikus Unix nyelvtan egyperces felbontással. A hatmezős cron egy vezető másodperc oszlopot ad hozzá a percen belüli ütemezéshez — ezt használja a Quartz és a Spring @Scheduled annotációja. Az AWS EventBridge szintén hat mezőt használ, de az extra oszlopa a végén lévő év, nem a másodperc.

    Mit jelentenek a @hourly, @daily és @weekly?

    Vixie-cron becenevek 1987-ből. @hourly = 0 * * * *, @daily = 0 0 * * *, @weekly = 0 0 * * 0, @monthly = 0 0 1 * *, @yearly = 0 0 1 1 *. A @reboot egyszer indul a rendszerindításkor. A GitHub Actions és az EventBridge elutasítja ezeket az aliasokat.

    A vasárnap 0. vagy 7. nap a cron-ban?

    Mindkettő, a klasszikus Vixie cron-ban — a 0 és a 7 is elfogadott, így az olyan tartományok, mint 5-7, természetesen olvashatók péntektől vasárnapig. A hétfő mindig 1, a szombat mindig 6. A Quartz és az AWS EventBridge más konvenciót használ: 1-7 a vasárnappal mint 1. Ellenőrizze a platform dokumentációját, mielőtt feltételezéseket tenne.

    Hogyan kezeli a cron a nyári időszámítást?

    A motor időzónájától függ. UTC-ben (alapértelmezett az EventBridge-ben, a Kubernetes-ben és a GitHub Actions-ben) a nyári időszámítás nem létezik. Helyi nyári időszámítású zónában a klasszikus Vixie cron kihagyja a feladatokat a tavaszi előreugráskor, és kétszer futtatja őket az őszi visszaálláskor; a systemd időzítők pontosan egyszer indulnak el.