Utilia

Cron-kifejezés generátor

Állítsd össze a cron-kifejezést mezőnként, olvasd el közérthetően, nézd meg a következő futásokat, és váltsd át systemd, Quartz vagy AWS formátumra.

Összeállító

MezőMódÉrték
Perc0–59
Óra0–23
A hónap napja1–31, L
Hónap1–12 vagy JAN–DEC
A hét napja0–7 (a 0 és a 7 = vasárnap) vagy SUN–SAT

Hogyan készíts cron-kifejezést

  1. Írj vagy illessz be egy kifejezést a Cron-kifejezés mezőbe, vagy válassz egyet az Előbeállítások közül. Az olyan makrókat, mint a @daily vagy a @weekly, szintén elfogadja.
  2. Vagy használd az Összeállító részt: minden mezőnél válassz Módot (Minden, Minden N-edik, Meghatározott értékek, Tartomány vagy Egyéni), és töltsd ki az Érték mezőt. A kifejezés menet közben frissül, a kifejezés szerkesztése pedig az összeállítót frissíti.
  3. Jelöld be a Másodpercmező hozzáadása (6 mező) opciót, ha az ütemeződ támogatja a másodperceket.
  4. Olvasd el az ütemezést Közérthetően (az oldal nyelvén, ha a leíró könyvtár támogatja, egyébként angolul), majd nézd meg a Következő futások listát. Válaszd ki a feladatot futtató szerver Időzóna beállítását, valamint azt, hogy Hány darab futást listázzon.
  5. Másold ki a kifejezést a Másolás gombbal, vagy használd az Egyéb formátumok egyikét.

A hibákat az eszköz mezőnként magyarázza, például „Perc: a(z) 61 kívül esik a tartományon (0–59)”, így pontosan tudod, mit kell javítani.

Az öt cron-mező

A szabványos (Vixie) cron-sor öt mezőből áll, utána jön a parancs:

Mező Megengedett értékek
Perc 0–59
Óra 0–23
A hónap napja 1–31
Hónap 1–12 vagy JAN–DEC
A hét napja 0–7 (a 0 és a 7 vasárnap) vagy SUN–SAT

Minden mező elfogadja a * jelet (minden érték), a 1,15 listát, a 9-17 tartományt, a */15 lépést (minden 15. egység) vagy a lépéses tartományt, például 0-30/10. Így a */15 9-17 * * 1-5 azt jelenti: 15 percenként 9:00 és 17:45 között, hétfőtől péntekig.

Egy szabály sokakat meglep: ha mind a hónap napja, mind a hét napja mező korlátozva van, a klasszikus cron akkor fut, ha bármelyik egyezik. A 0 0 13 * 5 minden 13-án és minden pénteken lefut, nem csak a péntek 13-án. Ilyenkor az eszköz figyelmeztetést jelenít meg.

A következő futások és az időzónák

A cron a gép óráját használja, vagy a crontab CRON_TZ/TZ beállítását. A Következő futások lista az általad választott időzónára számolódik, a nyári időszámítás váltásait is beleértve: tavaszi óraátállításkor egy 2:30-ra időzített feladat kimaradhat, ősszel pedig a megvalósítástól függően egyszer vagy kétszer futhat. Azoknál a feladatoknál, amelyeknek pontosan egyszer kell lefutniuk, válassz 1:00–3:00 közötti sávon kívüli időpontot, vagy használj UTC-t.

Vixie cron, systemd időzítők, Quartz és AWS

  • A systemd időzítők az OnCalendar= beállítást használják eltérő szintaxissal: Mon..Fri *-*-* 09..17:00/15:00. A hétköznap- és dátumfeltételek ÉS, nem VAGY kapcsolatban állnak, ezért egyes cron-kifejezéseknek nincs pontos megfelelőjük.
  • A Quartz és a Spring egy másodpercmezőt tesz az elejére, és évmezőt is hozzáadhat. A két napmező egyikének ?-nek kell lennie, a Quartz pedig a hétköznapokat vasárnaptól számolva 1–7-ig számozza, a cron 0–6 számozásával ellentétben. Az eszköz a hétköznapokat nevekkel (MON-FRI) írja, hogy elkerülje ezt a csapdát.
  • Az AWS EventBridge a cron(minutes hours day month weekday year) alakot használja: hat mező, másodperc nélkül, az egyik napmezőben ?, a végén pedig egy év.

A szabványos cronnak nincs másodpercmezője. A másodperces, 6 mezős alakot sok könyvtár (node-cron, Spring, Quartz) támogatja, a rendszer crontabja viszont nem.

A cron-kifejezés leírása („Közérthetően”) magyarul is megjelenik, a következő futások dátumait pedig az eszköz magyar formátumban mutatja.

Gyakori kérdések

Hogyan futtassak egy feladatot 5 percenként?

Használd a */5 * * * * kifejezést. A feladat minden óra 0., 5., 10. stb. percében fut.

Hogyan futtassak egy feladatot a hónap utolsó napján?

Sok ütemező elfogadja az L jelet a hónap napja mezőben: 0 18 L * *. A sima Vixie cronnál futtasd naponta a 28–31. napokon, és a szkriptben ellenőrizd, hogy holnap 1-je van-e.

Mit csinál az @reboot?

Egyszer futtatja a parancsot, amikor a cron-démon elindul. Nincs ütemezése, ezért az eszköz nem tud futási időpontokat listázni hozzá.

Miért nem fut a feladatom a mutatott időpontban?

Ellenőrizd a szerver időzónáját, a felhasználó crontabját az /etc/crontab fájllal szemben (amelyben van egy további felhasználó-mező), és a PATH változót: a cron minimális környezettel indul.

A 0 vagy a 7 a vasárnap?

Mindkettő. A hét napja mezőben a 0 és a 7 egyaránt vasárnapot jelent, az 1 a hétfő, a 6 pedig a szombat.