Cron kifejezés építése

cron kifejezést épít vizuális mezőkből vagy presetből (percenként, óránként, naponta, hetente...)

Miért egy vizuális cron builder?

Egy cron kifejezés mindössze öt mezőből áll, mégis az egyik legtöbb hibát generálja az éles üzemben. Hányszor írt egy fejlesztő 0 0 * * 1-et, azt gondolva, hogy "minden hétfőn", anélkül, hogy eszébe jutott volna, hogy az 1 a megvalósítástól függően vasárnapot is jelenthet? Hányszor tévesztették össze a */15-öt és a 15-öt? A cron builder erre az igényre válaszol: vizuálisan állíthat össze egy crontab kifejezést a gyakori előbeállításokból vagy egyéni mezőkből, és megkapja a kész kifejezést, amelyet beilleszthet egy Linux crontabba, egy Kubernetes CronJobba vagy egy GitHub Actions ütemezésbe.

Az eszköz a cron decoder-ünk ellentéte: míg a konverter egy kifejezést vesz alapul és felsorolja a következő futtatásokat, a builder emberi választásokat vesz alapul, és előállítja a megfelelő cron kifejezést.

Hogyan működik

A grafikus felület két kiegészítő összeállítási módot kínál:

  • Előbeállítás mód: egy gyakoriságválasztó (minden percben, minden órában, minden nap, minden héten, minden hónapban, minden évben, egyéni), amely azonnal generál egy érvényes cron kifejezést.
  • Mező mód: öt szerkeszthető mező (perc, óra, hónap napja, hónap, hét napja), ahol szabadon megadhatja a * karaktert, egy egész számot, egy tartományt 1-5, egy listát 1,15,30 vagy egy lépésközt */15.

A builder valós időben frissíti a kifejezést, és megjelenít egy rövid, emberi nyelven olvasható formát ("minden nap 3 órakor", "15 percenként"), amely biztonsági korlátként szolgál: ha a mondat nem egyezik a szándékával, a kifejezés valószínűleg hibás.

Az öt cron mező, érthetően

Egy standard cron kifejezés öt mezőt tartalmaz, szóközökkel elválasztva:

perc  óra  hónap-napja  hónap  hét-napja
*     *    *            *      *
  • perc (0-tól 59-ig);
  • óra (0-tól 23-ig);
  • hónap napja (1-től 31-ig);
  • hónap (1-től 12-ig vagy Jan, Feb stb. rövidítések);
  • hét napja (0-tól 7-ig, a 0 és a 7 is vasárnapot jelent a legtöbb megvalósításban).

Minden mező több formát elfogad: * (minden érték), egy pontos egész szám (5), egy lista (1,3,5), egy tartomány (9-17), egy lépésköz (*/15 minden 15. érték), vagy ezek kombinációja (0-30/5).

Tipikus felhasználási esetek

  • Cron-t tanuló fejlesztő: vizualizálhatja, hogyan hatnak egymásra az egyes mezők, anélkül, hogy kockáztatna egy hibás kifejezést az éles üzemben.
  • Siető rendszergazda: néhány másodperc alatt generálhat ütemezést egy Linux cronhoz, egy Kubernetes CronJobhoz vagy egy Ansible jobhoz anélkül, hogy újra elolvasná a man oldalt.
  • POSIX tapasztalattal nem rendelkező fejlesztő: érvényes crontab kifejezést készíthet Symfony Schedulerhez, Laravel Schedulerhez vagy node-cronhoz a történelmi szintaxis ismerete nélkül.
  • DevOps a felülvizsgálat során: gyorsan prototipizálhat egy kifejezést egy pull requesthez, majd érvényesítheti azt a cron decoder segítségével.
  • Legacy migráció: egy történelmi cron kifejezés újrafogalmazása a builderen keresztül, hogy meggyőződjön a szemantikáról, mielőtt máshová továbbítaná.

Gyakori előbeállítások

Egy előbeállítás kiválasztása felülírja az egyéni mezőket, és előállítja a megfelelő kifejezést:

  • Minden percben: * * * * *. Kerülendő az éles üzemben, kivéve különleges igény esetén.
  • Minden órában: 0 * * * *. Minden óra elején.
  • Minden nap: 0 0 * * *. Éjfélkor.
  • Minden héten: 0 0 * * 0. Minden vasárnap éjfélkor.
  • Minden hónapban: 0 0 1 * *. A hónap 1. napján éjfélkor.
  • Minden évben: 0 0 1 1 *. Január 1-jén éjfélkor.

Gyakori ismerendő minták

Kifejezés Emberi olvasat
0 0 * * * Minden nap éjfélkor
*/15 * * * * 15 percenként
0 9 * * 1-5 Minden munkanapon 9 órakor
0 0 1 * * A hónap 1. napján éjfélkor
0 0 * * 0 Minden vasárnap éjfélkor
*/5 9-17 * * 1-5 5 percenként munkaidőben
0 3 * * * Minden nap hajnali 3-kor
30 2 1,15 * * A hónap 1. és 15. napján 2:30-kor

Egyéni kifejezés összeállítása

Specifikusabb esetekhez az asszisztens szabad bevitelre kínálja az öt mezőt. Néhány hasznos példa:

  • Minden nap hajnali 3-kor: perc=0, óra=3, egyéb mezők *.
  • 15 percenként: perc=*/15, egyéb mezők *.
  • Hétfőtől péntekig 9 órakor: perc=0, óra=9, hét-napja=1-5.
  • A hónap minden 1. és 15. napján délben: perc=0, óra=12, hónap-napja=1,15.
  • 5 percenként 9 és 17 óra között: perc=*/5, óra=9-17.

Hogyan használjuk a cron buildert

  1. Válasszon egy előbeállítást (minden percben, minden órában, minden nap, minden héten, minden hónapban, minden évben), amely megfelel az igénye alapjának.
  2. Szükség esetén finomítsa az öt mező (perc, óra, hónap napja, hónap, hét napja) közvetlen szerkesztésével.
  3. Olvassa el az eszköz által generált emberi mondatot a szándék megerősítéséhez.
  4. Másolja ki az előállított cron kifejezést a másolás gombbal.
  5. Érvényesítse az ütemezést a cron decoder-ünkkel, amely kiszámítja a következő tényleges futtatási dátumokat.
  6. Illessze be a kifejezést a Linux crontabba, a Kubernetes CronJobba, a Symfony Schedulerbe vagy a GitHub Actions munkafolyamatba.

Klasszikus csapdák

  • Kombinált hónap napja és hét napja: ha mindkettő nem *, a viselkedés a megvalósítástól függően eltér. A Linux/Vixie cron egy VAGY kapcsolatot alkalmaz; a modern könyvtáraknak néha más a viselkedése. Kerülendő.
  • 1. nap = hétfő vagy vasárnap?: az országtól és a konvenciótól függ. A legtöbb Unix cron a vasárnapot 0-nak, a szombatot pedig 6-nak tekinti. Ellenőrizze az ütemezőjét.
  • Időzóna: egy Unix cron alapértelmezés szerint a szerver időzónáját használja. Az alkalmazás-ütemezők (Symfony Scheduler, Quartz) gyakran lehetővé teszik egy dedikált időzóna rögzítését.
  • Hiányzó perc: a * * * * * minden percben lefuttatja a feladatot, ami ritkán az, amit szeretnénk. Ne felejtsen el pontos indítót (0) megadni az óránkénti feladatokhoz.

Emberi olvasat és kimenet

A cron kifejezés mellett az eszköz egy rövid, emberi nyelven olvasható formát is kínál ("minden nap éjfélkor", "5 percenként"). Ez egy biztonsági korlát: ha a mondat nem egyezik a szándékával, a kifejezés valószínűleg hibás. Összetett esetekben használja cron decoder-ünket a következő tényleges futtatási dátumok kiszámításához.

Gyakran ismételt kérdések

Szerkeszthetem-e manuálisan a kifejezést a felület használata után?

Igen. A builder nem egy kizárólagos mód: az öt mező bármikor szerkeszthető marad. Indulhat egy előbeállításból, majd kézzel módosíthat egy mezőt egy egyedi crontab kifejezés eléréséhez. Az emberi olvasat azonnal újraszámításra kerül.

Támogatja az eszköz a 6 mezős Quartz formátumot (másodpercekkel)?

Nem: az 5 mezős formátum az Unix szabvány és a legtöbb ütemező közös alapja (Linux crontab, Kubernetes CronJob, GitHub Actions, GitLab CI, Symfony Scheduler, Laravel Scheduler). A Quartz (Java) egy plusz mezőt fogad el a másodpercekhez és speciális szimbólumokat (?, L, W, #), de ez az igény ritka marad.

Hogyan kezelik az időzónát?

A builder egy semleges cron kifejezést állít elő: az a motor alkalmazza az időzónáját, amelyik a feladatot futtatja. Egy Linux crontab esetén ez a szerver TZ-je. GitHub Actions esetén ez az UTC. Kubernetes 1.27+ esetén a spec.timeZone-t rögzítheti a manifestben. A Symfony Scheduler és a Quartz feladatonkénti dedikált időzónát tesz elérhetővé.

Hogyan érvényesíthetem a kifejezésemet anélkül, hogy élesben lefuttatnám?

Használja cron decoder-ünket. Kiszámítja az aktuális pillanattól számított N következő futtatást, anélkül, hogy bármilyen feladatot elindítana. Ez a legjobb módja annak, hogy megerősítse, egy cron kifejezés valóban a tervezett időpontban indul-e el a telepítés előtt.

Mi a kapcsolat a Symfony Schedulerrel?

A Symfony Scheduler az 5 mezős cron kifejezéseket a Schedule::cron('0 3 * * *', ...) módon fogadja el. A builder által előállított kifejezés tehát változatlanul beilleszthető. Ugyanez vonatkozik a Laravel Schedulerre (->cron('...')), a node-cronra, a Hangfire-re és az Airflow-ra is.

Kell-e a parancs elé felhasználót írni a rendszer crontabjában?

Igen, az /etc/crontab fájlban szükség van egy felhasználóra (0 3 * * * www-data /usr/bin/php ...), míg a felhasználónkénti crontab -e elhagyja azt. Maga a kifejezés ugyanaz marad.

Kérés példa

curl -X POST https://cdrn.fr/api/v1/tools/cron-builder/execute \
  -H "Content-Type: application/json" \
  -d '{"preset":"none","minute":"*","hour":"*","day_of_month":"*","month":"*","day_of_week":"*"}'

Bemeneti séma

Mező Típus Kötelező Alapértelmezett
preset choice (none, every_minute, hourly, daily, weekly, monthly, yearly) none
minute string *
hour string *
day_of_month string *
month string *
day_of_week string *

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-builder - lekéri ezen eszköz sémáját
  • POST https://cdrn.fr/api/v1/tools/cron-builder/execute - végrehajtja ezen eszközt JSON payloaddal