Cron kifejezés következő futásainak számítása

elemzi és megjeleníti a cron konfiguráció következő futási dátumait

Mi az a cron kifejezés?

A cron kifejezés egy rövid karakterlánc, amely az időbeli ismétlődést írja le. Az Unixból örökölt formátum öt, szóközökkel elválasztott mezőből áll: perc, óra, hónap napja, hónap és hét napja. Ez a szintaxis Brian Kernighan cron démonával született az 1970-es években, majd a Vixie cron (1987) által vált általánossá, amelyet minden modern Linux és macOS disztribúció átvett. Ma ugyanez a szintaxis megtalálható a legtöbb felhőalapú ütemezőben (AWS EventBridge, GCP Cloud Scheduler, Azure Logic Apps) és CI/CD eszközben (GitHub Actions, GitLab CI, Jenkins).

┌──── perc (0-59)
│ ┌── óra (0-23)
│ │ ┌── hónap napja (1-31)
│ │ │ ┌── hónap (1-12 vagy JAN-DEC)
│ │ │ │ ┌── hét napja (0-7 vagy SUN-SAT, 0 és 7 = vasárnap)
│ │ │ │ │
* * * * *

Egy jól megformázott cron kifejezés tehát pontos cron schedule-t (ütemezést) határoz meg: minden mező lehet fix érték, tartomány, lista, lépésköz vagy egy csillag, amely mindenre illeszkedik. A crontab kifejezés tömörsége az erőssége, de ez teszi nélkülözhetetlenné a cron decoder-t a szándék vizuális megerősítéséhez. Ez a cron converter célja: olvasható cron magyarázatot és a következő futtatások listáját állítja elő.

Egy cron kifejezés anatómiája

Az öt mező közös nyelvtant használ. Íme a standard crontab kifejezés egyes oszlopai által elfogadott határértékek:

  • Perc: 0-59.
  • Óra: 0-23, 24 órás formátum.
  • Hónap napja: 1-31.
  • Hónap: 1-12 vagy a JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC szöveges rövidítések.
  • Hét napja: 0-7, ahol a 0 és a 7 is vasárnapot jelent, vagy a SUN, MON, TUE, WED, THU, FRI, SAT rövidítések.

Mind az öt mezőben használt speciális karakterek:

  • * : bármilyen érték, a mező minden engedélyezett értékére illeszkedik.
  • , : különálló lista, például 1,15,30 a perc mezőben.
  • - : inkluzív tartomány, például 9-17 munkaidőhöz.
  • / : lépésköz (step), például */15 = 15 egységenként, vagy 0-30/5 = 5 percenként 0 és 30 között.

Quartz kiterjesztések (Java, AWS EventBridge, Spring): a nyelvtan 6 vagy 7 mezőre bővül egy vezető másodpercek oszloppal (0-59) és néha egy záró év oszloppal (1970-2099). A Quartz bevezeti a ?-et is (nincs konkrét érték, a hónap napja és a hét napja szétválasztásához), az L-et (last: a hónap utolsó napja, vagy az utolsó péntek a 5L-lel), a W-t (legközelebbi munkanap) és a #-et (a hónap N-edik hétnapja, például 2#3 a 3. hétfőhöz). Egy Quartz kifejezés általában nem kompatibilis egy UNIX crontabbal és fordítva: ez a hibák fő forrása, amikor egy cron kifejezést másolunk egyik platformról a másikra.

# UNIX / Vixie cron (5 mező)
0 9 * * 1-5

# Quartz (6 mező másodpercekkel)
0 0 9 ? * MON-FRI

# Quartz (7 mező évvel)
0 0 9 ? * MON-FRI 2026

Miért dekódoljunk egy cron kifejezést?

A 0 0 * * * beolvasása gyors. A */7 2-5 1,15 * 1-5 beolvasása már jóval kevésbé az. Amikor egy kifejezés túllép a triviálison, megnő a félreértelmezés kockázata, és a cron decode önálló felülvizsgálati lépéssé válik.

  • Éles üzemű hibakeresés: megérteni, miért indult el egy feladat 03:17-kor és nem 03:00-kor, vagy azonosítani két job közötti átfedést.
  • Code review: érvényesíteni, hogy egy pull requestben beküldött ütemező valóban azt teszi-e, amit a szerző állít, anélkül, hogy minden szimbólum szemantikáját fejből kellene tudni.
  • Ütemezők auditálása: átnézni a Linux cron jobokat az /etc/crontab és /etc/cron.d/ könyvtárakban, a Jenkins triggereket, a Kubernetes CronJob spec.schedule részeit, az AWS EventBridge szabályokat és a GCP Cloud Scheduler jobokat.
  • Legacy migráció: egy történelmi /etc/crontab átvétele dokumentáció nélkül, és a feladatok feltérképezése egy infrastruktúra-váltás előtt.
  • Onboarding: lehetővé tenni egy új fejlesztő számára egy crontab beolvasását anélkül, hogy egyik napról a másikra meg kellene tanulnia az összes speciális karaktert.

Hogyan használjuk a cron decodert

A folyamat egy crontab kifejezés dekódolásához az eszközzel:

  1. Illessze be a cron kifejezését a beviteli mezőbe (5 mező szóközökkel elválasztva).
  2. Adja meg a kiszámítandó következő futtatások számát.
  3. Kattintson a convert gombra a cron decode elindításához: az eszköz egy emberi mondatot ad vissza, amely elmagyarázza az indítást, valamint a következő futtatások dátumozott listáját.
  4. Vizuálisan ellenőrizze, hogy a dátumok megfelelnek-e a szándékának (óra, nap, gyakoriság).
  5. Másolja ki a kimenetet a másolás gombbal, hogy beillessze egy jegybe, egy PR-ba vagy egy technikai dokumentációba.

Az eszköz nem csak egy szintaktikai elemzést végez: természetes nyelven ad cron magyarázatot, így egyszerre cron decoder és ütemezés-érvényesítő is.

Klasszikus cron kifejezés példák

Az alábbi minták lefedik az éles üzemben találkozó cron schedule-ök nagy részét. Mindegyik érvényes Linux crontab, Kubernetes CronJob, GitHub Actions és a legtöbb alkalmazás-ütemező esetén.

Kifejezés Emberi olvasat
* * * * * Minden percben
0 * * * * Minden egész órában
0 0 * * * Minden nap éjfélkor
0 0 * * 0 Minden vasárnap éjfélkor
*/15 * * * * 15 percenként
0 9 * * 1-5 9:00 hétfőtől péntekig
0 0 1 * * Minden hónap 1-jén éjfélkor
0 0,12 * * * Éjfélkor és délben minden nap
*/5 9-17 * * 1-5 5 percenként munkaidőben
30 2 1,15 * * A hónap 1. és 15. napján 2:30-kor

Linux szerveren egy cron feladat végrehajtásához a felhasználói crontab-ot a shellből szerkesztjük:

# az aktuális felhasználó crontab-jának szerkesztése
$ crontab -e

# a meglévő feladatok listázása
$ crontab -l

# példa hozzáadott sorra: napi mentés 3 órakor
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

Példa a cron converter kimenetére a */5 * * * * kifejezéshez:

2026-05-05 00:00:00
2026-05-05 00:05:00
2026-05-05 00:10:00
2026-05-05 00:15:00
2026-05-05 00:20:00
...

Gyakori kérdések a cron decoderről

Mi a különbség az UNIX cron és a Quartz között?

Az UNIX/Vixie cron 5 mezőt használ (perc és a hét napja között), másodperc alapú pontosság nélkül, és nincs natív fogalma az „utolsó nap a hónapban” fogalomra. A Quartz (Java, Spring, AWS EventBridge) egy másodperc oszlopot ad hozzá az elejéhez, néha egy év oszlopot a végéhez, és számos olyan szimbólumot használ (?, L, W, #), amelyek hiányoznak a Linux crontabból. Egy 6 mezőből álló Quartz cron kifejezés tehát nem vihető át közvetlenül az /etc/crontab fájlba, és fordítva. A mi cron decoder eszközünk az 5 mezős formátumot célozza meg, amely a legtöbb ütemezőt lefedi.

Hogyan futtassunk egy cron feladatot 5 percenként?

A perc mezőben használt / lépésközzel:

*/5 * * * * /usr/local/bin/check-health.sh

Ez a crontab kifejezés minden óra 0, 5, 10, 15... percében indítja el a szkriptet, minden nap. A hétfőtől péntekig tartó munkaidőre való korlátozáshoz adja hozzá a megkötéseket az óra és a hét napja mezőkhöz: */5 9-17 * * 1-5.

Mit jelent a csillag (*) egy cron kifejezésben?

A csillag azt jelenti: bármilyen érték: a mező összes megengedett értékére illeszkedik. A 0 0 * * * kifejezésben a három csillag azt jelenti: „a hónap bármely napján, bármely hónapban, a hét bármely napján”. Az első két, 0-ra állított mezővel kombinálva kapjuk a „minden nap éjfélkor” ütemezést. A csillag lépésközzel is kombinálható: */15 a perc mezőben = 15 percenként.

Van a crontabnak időzónája?

Alapértelmezés szerint a szerver időzónája. Linux crontab esetén ez a rendszer időzónája (VPS-eken és konténerekben gyakran UTC). A GitHub Actions az UTC-t erőlteti. A Kubernetes CronJob a vezérlő időzónáját használja, amely az 1.27-es verzió óta a spec.timeZone segítségével konfigurálható. Az AWS EventBridge UTC-ben értékeli ki a kifejezéseket. Az alkalmazásszintű ütemezők (Symfony Scheduler, Quartz, Airflow) gyakran lehetővé teszik egy dedikált időzóna beállítását minden feladathoz. Kétség esetén ellenőrizze a date parancsot a célszerveren, és hasonlítsa össze a cron converter kimenetével.

Cron job vs at parancs: melyiket válasszuk?

A cron egy ismétlődő feladat ütemezett végrehajtására szolgál. Az at egy parancs egyetlen alkalommal történő futtatására szolgál egy adott időpontban. Napi mentéshez, naplórotációhoz vagy rendszeres API-híváshoz használja a cront. Egy egyszeri művelet késleltetéséhez („indítsd újra ezt a telepítést ma este 22 órakor”) használja az at parancsot:

$ echo "/usr/local/bin/deploy.sh" | at 22:00
Hogyan teszteljünk egy cron kifejezést anélkül, hogy aktiválnánk?

Pontosan ez a cron converter szerepe: kiszámítja a következő N végrehajtást az aktuális időponttól kezdve, anélkül, hogy bármilyen feladatot elindítana. Azonnal láthatja, hogy a crontab kifejezése a tervezett módon 03:00-kor fut-e le, vagy véletlenül 03:17-kor. Mielőtt telepítené a feladatot, tesztelheti a szkriptet önmagában is (bash -x script.sh), és ellenőrizheti a crontab fájl szintaxisát a crontab -T fájl paranccsal az azt támogató disztribúciókon.

Mi történik, ha a hónap napja és a hét napja is meg van határozva?

Vixie cron (Linux) esetén a szabály egy logikai VAGY: a feladat akkor fut le, ha a két mező közül az egyik vagy a másik illeszkedik. Ez nem egyértelmű és hibaforrás lehet. A Quartz logikai ÉS-t használ, ezért vezették be a ? szimbólumot a „nincs megkötés” kifejezett jelzésére. Általános szabályként csak az egyik mezőt határozza meg a kettő közül.

Kérés példa

curl -X POST https://cdrn.fr/api/v1/tools/cron-converter/execute \
  -H "Content-Type: application/json" \
  -d '{"cron":"...","number_next_date":1}'

Bemeneti séma

Mező Típus Kötelező Alapértelmezett
cron string
number_next_date integer

Végpontok

  • GET https://cdrn.fr/api/v1/tools - listázza az összes elérhető eszközt
  • GET https://cdrn.fr/api/v1/tools/cron-converter - lekéri ezen eszköz sémáját
  • POST https://cdrn.fr/api/v1/tools/cron-converter/execute - végrehajtja ezen eszközt JSON payloaddal