Cron kifejezések titkai: Ütemezz bármit
Éjjel 3-kor kell futtatni egy adatbázis-biztonsági mentést. Vagy minden hétfő reggel jelentést kell küldeni. Vagy 15 percenként kell üríteni egy gyorsítótárat. Linux és Unix szervereken erre a feladatra a cron eszköz való, és az, hogy megmondd a cronnak, mikor futtasson valamit, egy cron kifejezéssel történik.
A cron kifejezések első látásra ijesztőnek tűnnek. A 0 3 * * * vagy a */15 9-17 * * 1-5 értelmetlennek tűnhet, ha nem ismered a mintát. De a szintaxis meglepően egyszerű, ha megérted az öt mezőt.
Az öt mező
Minden standard cron kifejezésnek pontosan öt mezője van, szóközökkel elválasztva. Minden mező egy időegységet jelöl:
┌───────────── perc (0-59)
│ ┌───────────── óra (0-23)
│ │ ┌───────────── nap a hónapban (1-31)
│ │ │ ┌───────────── hónap (1-12)
│ │ │ │ ┌───────────── hét napja (0-7, ahol 0 és 7 is vasárnap)
│ │ │ │ │
* * * * *
Ennyi. Öt mező, balról jobbra: perc, óra, nap a hónapban, hónap, hét napja.
Tudtad? A „cron" név a görög „chronos" szóból ered, ami időt jelent. A cron démon (háttérfolyamat) 1975 óta a Unix-szerű operációs rendszerek egyik alapeleme.
A speciális karakterek
Csillag (*) — Minden érték
A csillag „minden lehetséges értéket" jelent az adott mezőben.
* * * * * = minden nap, minden óra minden percében.
Vessző (,) — Több érték
A vessző egyedi értékeket választ el.
0 9,12,18 * * * = a 9., 12. és 18. óra 0. percén (9:00, 12:00, 18:00).
Kötőjel (-) — Értéktartomány
A kötőjel tartományt határoz meg.
0 9-17 * * * = a 9-től 17-ig tartó órák 0. percén (9:00-tól 17:00-ig, óránként).
Perjel (/) — Lépésértékek
A perjel intervallumokat határoz meg.
*/15 * * * * = minden 15 percben (a 0., 15., 30. és 45. percben minden órában).
0 */2 * * * = minden 2 órában a 0. percen (éjfél, 2:00, 4:00...).
Cron kifejezések olvasása: gyakorlat
Dolgozzunk végig néhány közös példán. Mindegyiknél olvassuk balról jobbra az öt mezőt.
0 3 * * * — Naponta 3:00-kor
| Mező | Érték | Jelentés |
|---|---|---|
| Perc | 0 | A 0. percen |
| Óra | 3 | A 3. órában (3:00) |
| Nap a hónapban | * | Minden nap |
| Hónap | * | Minden hónapban |
| Hét napja | * | A hét minden napján |
Fordítás: „Minden nap 3:00-kor." Az éjszakai biztonsági mentések klasszikus időpontja.
*/15 * * * * — Minden 15 percben
| Mező | Érték | Jelentés |
|---|---|---|
| Perc | */15 | Minden 15 percben |
| Óra | * | Minden órában |
| Nap a hónapban | * | Minden nap |
| Hónap | * | Minden hónapban |
| Hét napja | * | Minden nap |
Fordítás: „Minden 15 percben, éjjel-nappal." Jellemzően állapotellenőrzésekre és gyorsítótár-frissítésre.
0 9 * * 1-5 — Hétköznapokon 9:00-kor
| Mező | Érték | Jelentés |
|---|---|---|
| Perc | 0 | A 0. percen |
| Óra | 9 | A 9. órában |
| Nap a hónapban | * | Minden nap |
| Hónap | * | Minden hónapban |
| Hét napja | 1-5 | Hétfőtől péntekig |
Fordítás: „9:00-kor, hétfőtől péntekig." Tökéletes napi munkajelentésekhez.
0 0 1 * * — Minden hónap első napján
| Mező | Érték | Jelentés |
|---|---|---|
| Perc | 0 | A 0. percen |
| Óra | 0 | A 0. órában (éjfél) |
| Nap a hónapban | 1 | Az 1-jén |
| Hónap | * | Minden hónapban |
| Hét napja | * | A hét bármely napján |
Fordítás: „Minden hónap első napján éjfélkor." Havi jelentésekhez, számlázáshoz vagy karbantartáshoz.
30 8 * * 1 — Hétfőnként 8:30-kor
| Mező | Érték | Jelentés |
|---|---|---|
| Perc | 30 | A 30. percen |
| Óra | 8 | A 8. órában |
| Nap a hónapban | * | Minden nap |
| Hónap | * | Minden hónapban |
| Hét napja | 1 | Hétfőn |
Fordítás: „Minden hétfőn 8:30-kor." Remek heti csapatértesítésekhez.
Saját cron kifejezések írása
Egy szisztematikus megközelítés:
- Kezdd azzal, mikor. „Minden nap 3:00-kor" vagy „minden 5 percben munkaidőben."
- Töltsd ki a mezőket balról jobbra. Kezdd a perccel, majd az óra, majd a nap a hónapban, majd a hónap, majd a hét napja.
- Használj
*-t a „minden" jelölésére. Ha egy mező nem számít, használj*-t. - Telepítés előtt tesztelj. Mindig ellenőrizd, hogy a kifejezés az elvárt ütemezést eredményezi-e.
Gyors referencia a leggyakoribb mintákhoz
| Ütemezés | Kifejezés |
|---|---|
| Minden percben | * * * * * |
| Minden 5 percben | */5 * * * * |
| Óránként | 0 * * * * |
| Minden nap éjfélkor | 0 0 * * * |
| Minden nap 3:00-kor | 0 3 * * * |
| Minden hétfőn 9:00-kor | 0 9 * * 1 |
| Hétköznapokon 8:30-kor | 30 8 * * 1-5 |
| Minden hónap első napján | 0 0 1 * * |
| Minden 15 percben, munkaidőben | */15 9-17 * * 1-5 |
| Naponta kétszer (9:00 és 18:00) | 0 9,18 * * * |
| Minden vasárnap 2:00-kor | 0 2 * * 0 |
Gyakori hibák
Elfelejteni, hogy az órák 0-23 között vannak
A 13. óra 13:00, nem 1:00. Egy tipikus hiba: 0 1 * * * beírása abban a hitben, hogy 13:00-kor fut, holott valójában 1:00-kor.
A hét napjaival kapcsolatos összezavarodás
A vasárnap lehet 0 vagy 7 is (mindkettő érvényes). A hétfő 1, a szombat 6. Néhányan azt várják, hogy a hétfő legyen 0.
Hónap napja vs. hét napja kölcsönhatás
Ha mind a hónap napját, mind a hét napját megadod (egyik sem *), a legtöbb cron implementáció akkor futtatja a feladatot, amikor bármelyik feltétel teljesül, nem amikor mindkettő. Ez sokakat meglepetésként ér.
Figyelmeztetés A 0 9 15 * 1 kifejezés NEM azt jelenti: „9:00-kor a 15-én, de csak ha az hétfő." Azt jelenti: „9:00-kor minden hónap 15-én ÉS 9:00-kor minden hétfőn." Ez egy közismert váratlan viselkedés forrása.
Időzóna-tudatosság
A cron a szerver helyi időzónájában fut. Ha a szervered UTC-ben van, és te Budapesten vagy (UTC+1), egy 0 9 * * * cron feladat a te időd szerint 10:00-kor fut. Mindig ellenőrizd a szervered időzónáját.
Tipp Teszteld és vizualizáld a cron kifejezéseket telepítés előtt: Hogyan olvasd és teszteld a cron kifejezéseket. Nézd meg a következő futási időpontokat, és ellenőrizd, hogy az ütemezés megfelel-e az elvárásaidnak.
Készítsd és teszteld a cron kifejezéseidet:
Ingyenes, azonnali, és regisztráció sem szükséges.