Cron kifejezés következő futásainak számítása
- Irányítópult
- Dokumentáció
- API
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-12vagy aJAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DECszöveges rövidítések. - Hét napja:
0-7, ahol a0és a7is vasárnapot jelent, vagy aSUN,MON,TUE,WED,THU,FRI,SATrö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ául1,15,30a perc mezőben.-: inkluzív tartomány, például9-17munkaidőhöz./: lépésköz (step), például*/15= 15 egységenként, vagy0-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 CronJobspec.scheduleré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:
- Illessze be a cron kifejezését a beviteli mezőbe (5 mező szóközökkel elválasztva).
- Adja meg a kiszámítandó következő futtatások számát.
- 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.
- Vizuálisan ellenőrizze, hogy a dátumok megfelelnek-e a szándékának (óra, nap, gyakoriság).
- 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öztGET https://cdrn.fr/api/v1/tools/cron-converter- lekéri ezen eszköz sémájátPOST https://cdrn.fr/api/v1/tools/cron-converter/execute- végrehajtja ezen eszközt JSON payloaddal