Mi ez az eszköz?
A cron kifejezés egy tömör, öt mezős ütemezési string — `perc óra hónap-napja hónap hét-napja` —, amelyet a Unix `cron` démon és gyakorlatilag minden róla mintázott feladatütemező (crontab, Kubernetes CronJob, GitHub Actions `schedule:`, Airflow, Jenkins) használ. Minden mező elfogad csillagot (`*`, jelentése „bármilyen érték”), konkrét számot, vesszővel elválasztott listát (`1,15,30`), tartományt (`9-17`), lépésközt (`*/15`, jelentése „minden 15 egységben”), vagy — hónap és hét napja esetén — hárombetűs nevet (`JAN`, `MON`) szám helyett.
E szintaxis mérvadó definíciója a Linux crontab(5) man oldala, amely pontosan ugyanezt az öt mezőt, speciális karaktereket (`* , - /`) és a nyolc `@` rövidítést (`@reboot`, `@yearly`/`@annually`, `@monthly`, `@weekly`, `@daily`/`@midnight`, `@hourly`) dokumentálja, amelyeket a legtöbb cron implementáció, beleértve a Vixie cront (amely a legtöbb Linux disztribúcióban megtalálható), gyakori ütemezések aliaszaként támogat.
Ez az eszköz pontosan ezt a szabványos 5 mezős formátumot implementálja — azt a formátumot, amit közvetlenül a `crontab -e`-be írnál egy Linux vagy macOS szerveren, vagy egy Kubernetes CronJob `schedule:` mezőjébe. Nem implementálja a Quartz cron szintaxist, amely egy eltérő, 6 vagy 7 mezős formátum, amelyet a Java Quartz Scheduler és néhány gyártói eszköz használ (lásd az alábbi összehasonlító részt, hogy mikor van szükséged inkább arra).
Miért érdemes használni?
- Most örököltél egy éles crontab-ot egy olyan sorral, mint a `17 3 * * 0`, komment nélkül, ami megmagyarázná — illeszd be ide, mielőtt bármihez hozzányúlnál, hogy lásd: valójában „minden vasárnap 3:17-kor” fut, nem elgépelés.
- GitHub Actions workflow-t írsz `schedule:` cron triggerrel, és folyton bizonytalan vagy, hogy a `0 */6 * * *` tényleg 6 óránként fut-e éjféltől kezdve — nézd meg a következő 5 futási időt, mielőtt commitolnád a YAML-t.
- Beállítottál egy cron feladatot mind a hónap napjára, mind a hét napjára vonatkozó megkötéssel, mint a `0 4 8 * MON`, és a feladat olyan napokon fut, amikre nem számítottál — ez az eszköz felfedi az OR-nem-AND unió viselkedést, ami szinte mindenkit meglep először.
- Kubernetes CronJobot építesz, és pontos `schedule:` stringre van szükséged a „minden 15 percben, csak munkaidőben, hétköznap” ütemezéshez, mezők kézi számolása nélkül — használd a legördülős builder helyette.
- Nem vagy biztos benne, hogy egy ütemező konfiguráció szabványos vagy Quartz cront használ, mert a dokumentáció csak annyit ír, „cron kifejezés” — ellenőrizd, hogy 5 mezős-e (ez az eszköz) vagy 6-7 mezős `?`/`L`/`W`/`#` karakterekkel (Quartz), mielőtt időt vesztegetnél egy formátumeltérés hibakeresésével.
- 100%-ban kliensoldali: az ütemezési logikád soha nem hagyja el a böngésződet.
Használati útmutató
- Egy kifejezés lefordításához: írj be vagy illessz be egy 5 mezős cron stringet (vagy egy @rövidítést, mint a `@daily`) a beviteli mezőbe.
- Olvasd el az egyszerű nyelvű leírást és a következő 5 kiszámított futási időt alatta — mindkettő élőben frissül, ahogy gépelsz.
- Ütemezés építéséhez: nyisd meg a Builder szekciót, válassz módot (mindig / minden N / konkrét érték) az öt mező mindegyikéhez, majd kattints a „Kifejezés generálása” gombra.
- A generált kifejezés kitölti a fenti beviteli mezőt, és azonnal visszahat a leírás- és következő-futás-panelekre.
- Használd az alsó szintaxis-jegyzéket gyors referenciaként a `*`, `,`, `-` és `/` karakterekhez.
- Másold ki a végleges kifejezést a Másolás gombbal, és illeszd be a crontab-odba, CI konfigurációdba vagy ütemezőbe.
Példa
Bemenet
*/15 9-17 * * MON-FRIKimenet
09:00, 09:15, 09:30, 09:45, 10:00 ... 17:45 időpontokban, hétfőn, kedden, szerdán, csütörtökön, péntekenEz a kifejezés minden 15 percben fut, de csak a 09:00–17:59 óra tartományon belül, és csak hétköznapokon — jellemző „munkaidős” lekérdezési ütemezés.
Szabványos cron vs. Quartz cron
A „cron szintaxis” nem egyetlen egyetemes szabvány — a két leggyakrabban előforduló formátum eltér a mezők számában és néhány speciális karakter jelentésében. Használd ezt a táblázatot annak megerősítésére, hogy a célütemeződ számára a megfelelőt használod.
| Szempont | Szabványos cron (ez az eszköz) | Quartz cron |
|---|---|---|
| Mezők száma | 5 (perc óra hónap-napja hónap hét-napja) | 6 vagy 7 (másodpercet és opcionális évet ad hozzá) |
| Használja | Linux/macOS crontab, Kubernetes CronJob, GitHub Actions | Java Quartz Scheduler, néhány vállalati ütemező |
| Hónap napja és hét napja is beállítva | Bármelyikre illeszkedik (unió/VAGY) | A két mező egyikében `?` szükséges — nem állítható be mindkettő egyszerre |
| Speciális extra karakterek | Nincs a `* , - /`-n túl | Hozzáadja a `?`, `L` (utolsó), `W` (legközelebbi hétköznap), `#` (hónap n-edik hétköznapja) karaktereket |
| Másodperc szintű ütemezés | Nem támogatott | Támogatott (első mező) |
Gyakori ütemezési receptek
Néhány kifejezés lefedi a legtöbb valós ütemezési igényt — érdemes ránézésre felismerni ezeket ahelyett, hogy minden alkalommal újra levezetnéd.
- `*/5 * * * *` — minden 5 percben, egész nap. Gyakori állapotellenőrzésekhez és könnyű lekérdező feladatokhoz.
- `0 */6 * * *` — minden 6 órában, kerek órakor (00:00, 06:00, 12:00, 18:00). Gyakori alapértelmezés időszakos szinkronizáláshoz vagy takarítási feladatokhoz.
- `0 2 * * *` — naponta egyszer, hajnali 2-kor. A klasszikus időpont éjszakai biztonsági mentésekhez, amikor a legkisebb a forgalom.
- `0 9 * * 1-5` — 9 órakor, csak hétfőtől péntekig. Szabvány csak-munkaidős riportokhoz vagy összefoglalókhoz.
- `0 0 1 * *` — minden hónap 1-jén éjfélkor, ekvivalens a `@monthly` rövidítéssel. Havi számlázási futtatásokhoz vagy használati resetekhez.
- `*/15 9-17 * * MON-FRI` — minden 15 percben, de csak munkaidőben hétköznap — egy kifejezésben kombinál lépésközt, tartományt és hét napja tartományt.
Kapcsolódó eszközök
Konfigurációkkal, ütemezésekkel vagy időbélyegekkel dolgozol? Ezek az eszközök jól illeszkednek a cron generátorhoz.
Gyakori kérdések
Mi az a cron kifejezés?
A cron kifejezés egy 5 mezős szöveges string (`perc óra hónap-napja hónap hét-napja`), amely ismétlődő ütemezést ad meg a Unix `cron` démon és a kompatibilis ütemezők számára. Minden mező lehet `*` (bármilyen érték), szám, vesszővel elválasztott lista, tartomány (`a-b`) vagy lépésköz (`*/n`); a hónap és hét napja mezők hárombetűs neveket is elfogadnak, mint a `JAN` vagy `MON`. A teljes specifikáció a crontab(5) man oldalon van dokumentálva.
Mi történik, ha a hónap napja és a hét napja is korlátozva van?
Ez egy ismert cron csapda: a POSIX cron szemantikája szerint, amikor MINDKÉT mező (hónap napja és hét napja) korlátozott (nem `*`), a feladat akkor fut, ha BÁRMELYIK feltétel teljesül — ez unió (VAGY), nem metszet (ÉS). Például a `0 4 8 * MON` reggel 4-kor fut minden hónap 8-án ÉS minden hétfőn is, nem csak azokon a hétfőkön, amelyek éppen a 8-ára esnek. Ez az eszköz pontosan ezt az unió-viselkedést implementálja a következő futási idők számításakor.
Szabványos cron vagy Quartz cron — melyikre van szükségem?
Ez az eszköz szabványos 5 mezős POSIX/Vixie cron szintaxist generál — azt a formátumot, amit a Linux/macOS `crontab`, Kubernetes CronJob, GitHub Actions `schedule:` és a legtöbb Unix-eredetű feladatfuttató használ. A Quartz cron, amelyet a Java Quartz Scheduler és az arra épülő eszközök (néhány vállalati ütemező, régebbi Spring Batch konfigurációk) használnak, egy eltérő, 6 vagy 7 mezős formátum, amely egy vezető másodperc-mezőt ad hozzá, és megváltoztatja néhány speciális karakter jelentését (`?` a „nincs konkrét érték” a napmezőkben, `L`/`W`/`#` az „utolsó nap”, „legközelebbi hétköznap” és „hónap n-edik hétköznapja” jelöléséhez). Ha az ütemeződ mezőszáma 6 vagy 7, vagy a dokumentáció `?`, `L`, `W` vagy `#` karaktereket említ, Quartz-specifikus eszközre van szükséged — az ebből a generátorból származó kifejezések ott nem fognak helyesen értelmeződni. Ha pontosan 5 mezőről van szó (vagy egy `@daily`-szerű rövidítésről), jó helyen jársz.
Mit jelentenek az @yearly, @monthly, @weekly, @daily és @hourly rövidítések?
Ezek nem szabványos, de széles körben támogatott rövidítés-stringek, amelyek gyakori 5 mezős kifejezésekre bomlanak ki: `@yearly`/`@annually` = `0 0 1 1 *` (évente egyszer, jan. 1-jén éjfélkor), `@monthly` = `0 0 1 * *` (minden hónap 1-jén éjfélkor), `@weekly` = `0 0 * * 0` (minden vasárnap éjfélkor), `@daily`/`@midnight` = `0 0 * * *` (minden nap éjfélkor), `@hourly` = `0 * * * *` (minden óra elején). Ez az eszköz mindegyiket értelmezi, és pontosan a kibontott 5 mezős megfelelőjükként kezeli.
Használhatok nap-/hónapneveket számok helyett?
Igen. A hónap mező elfogadja a `JAN`-tól `DEC`-ig terjedő hárombetűs neveket, a hét napja mező pedig a `SUN`-tól `SAT`-ig (kis- és nagybetű-érzéketlen), számokkal felcserélhető módon. A hét napja számok 0–6 tartományban futnak, ahol 0 = vasárnap; néhány implementáció a 7-et is elfogadja vasárnapként, amit ez az eszköz 0-ra normalizál. A tartományok és listák nevekkel is működnek, pl. `MON-FRI` vagy `JAN,JUN,DEC`.
A cron kifejezésem szerverre kerül?
Nem. Az elemzés, az egyszerű nyelvű leírás és a következő futási idő számítása is helyben, JavaScriptben, a böngésződben történik. Amit beírsz vagy generálsz, soha nem hagyja el az eszközödet.
Milyen időzónában számolódnak a következő futási idők?
Ez az eszköz a böngésződ helyi időzónáját használva számolja a következő futási időket, mivel a szabványos cronnak önmagában nincs beépített időzóna-mezője — a feladatodat futtató tényleges démon vagy ütemező azt az időzónát használja, amit a hoszt rendszere (vagy GitHub Actions és hasonló felhő-ütemezők esetén UTC) beállít. Ha a szervered időzónája eltér a böngésződétől, mentálisan told el a megjelenített időket, vagy ellenőrizd külön az ütemező időzóna-beállítását.
Hogyan ütemezzek egy feladatot, hogy csak a hónap utolsó napján fusson?
A szabványos 5 mezős cronnak nincs közvetlen „hónap utolsó napja” szintaxisa — ez az egyik funkció, amit a Quartz cron ad hozzá az `L` karakterrel. Szabványos cronban a gyakori megoldás a feladat 28.–31. napra ütemezése minden nap (`0 0 28-31 * *`), és a szkript maga ellenőrzi, hogy a holnapi dátum új hónapra fordul-e, mielőtt tényleg végrehajtaná a logikáját.
Ütemezhetek valamit szokatlan időközre, mint minden 10 percben?
Igen, a lépésköz szintaxissal: a `*/10 * * * *` minden 10 percben fut :00-tól kezdve (tehát :00, :10, :20, :30, :40, :50 időpontokban). Ne feledd, a lépésköz mindig a mező minimális értékétől kezd számolni, így a `*/10` a perc mezőben soha nem esik :05-re vagy :15-re — ha ilyen eltolásra van szükséged, használj inkább explicit vesszős listát, pl. `5,15,25,35,45,55`.
Miért tűnik úgy, hogy a cron feladatom kétszer fut egyszerre, vagy egyáltalán nem fut, a nyári/téli időszámítás váltása körül?
A szabványos cron a hoszt rendszer falióra-idejéhez ütemez, és az óraátállítások vagy kihagyott órát (tavaszi előreállítás), vagy megismételt órát (őszi visszaállítás) hoznak létre. Egy a kihagyott vagy megismételt órára ütemezett feladat aznap nullaszor vagy kétszer futhat, a cron démon konkrét kezelésétől függően. A kritikus infrastrukturális feladatok UTC-re állított szervereken (amelynek nincs nyári/téli időszámítása) történő futtatása ezt teljesen elkerüli.