Ha valaha is kezelt Linux-kiszolgálót, dolgozott háttérfejlesztéssel, vagy automatizált felhőfunkciókat állított be, valószínűleg találkozott egy karakterlánccal, amely valahogy így néz ki: 0 2 * * *. Az avatatlanok számára úgy néz ki, mint egy elírás a billentyűzeten. A rendszergazdák számára ez a modern infrastruktúra-automatizálás szívverése: egy Cron Expression.
A Cron az internetet futtató láthatatlan motor. Biztosítja az adatbázis biztonsági mentését hajnali 3 órakor, elindítja a minden hétfő reggel kapott e-mailt, és törli az ideiglenes szerverfájlokat, mielőtt a rendszer összeomlik. De ereje ellenére a szintaxist köztudottan nehéz elemezni az emberek számára. Ebben a mélyreható merülésben tisztázzuk a csillagokat, és megtanítjuk, hogyan kell olvasni és írni a cron ütemezését, mint egy tapasztalt DevOps mérnök.
Mi az a Cron és a Crontab?
A Cron egy időalapú munkaütemező, amely Unix-szerű számítógépes operációs rendszerekben található. A "cron" név a görög chronos idő szóból származik. A szoftverkörnyezeteket beállító és karbantartó felhasználók a cron segítségével ütemezik a feladatokat (parancsokat vagy shell-szkripteket), hogy meghatározott időpontokban, dátumokon vagy időközönként futhassanak.
A Crontab (Cron Table) az a konfigurációs fájl, amelyben ezek az ütemezések tárolódnak. Amikor a terminálon keresztül szerkeszti a crontab-ot, akkor egy listát ír az utasításokról, amelyek pontosan megmondják a szervernek, hogy mit és mikor kell végrehajtani.
Az 5 csillag dekonstrukciója
A standard cron kifejezés 5 mezőből áll, amelyeket szóközzel választanak el. Minden mező egy meghatározott időegységet jelent, és mindig balról jobbra olvassa be ezeket a pontos sorrendben:
* * * * * command_to_execute
- - - - -
| | | | |
| | | | +----- Day of the Week (0 - 6) (Sunday=0 or 7)
| | | +------- Month (1 - 12)
| | +--------- Day of the Month (1 - 31)
| +----------- Hour (0 - 23)
+------------- Minute (0 - 59)
A csillag (*) „a mező minden lehetséges értékét” jelenti. Tehát a * * * * * kifejezés szó szerinti fordítása: "Fuss minden percben, minden órában, minden napban, minden hónapban, a hét minden napján."
Szintaxismódosítók: lépések, tartományok és listák
A cron ereje a módosítóiból származik. Ön nem korlátozódik csak bizonyos számokra vagy „mindenre”.
1. A lépésmódosító (/)
Ha azt szeretné, hogy egy szkript 15 percenként fusson, használjon egy lépést. A */15 * * * * jelentése "minden perc, amely osztható 15-tel". 0, 15, 30 és 45 óra után fog futni.
2. A tartománymódosító (-)
Ha azt szeretné, hogy egy szkript csak munkaidőben fusson, használjon tartományt. A 0 9-17 * * * azt jelenti, hogy "nulla perccel fut, óránként 9 és 17 óra között".
3. A listamódosító (,)
Ha azt szeretné, hogy valami meghatározott, nem egymást követő napokon fusson, használjon listát. A 0 0 1,15 * * jelentése "futtatás a hónap 1-jén és 15-én éjfélkor".
Hagyd abba a Cron kifejezések találgatását
Ne kockáztassa meg, hogy minden hónap helyett percenként lefusson egy biztonsági mentési szkriptet. Egyetlen gépelési hiba összeomolhatja az éles szervert. Használja interaktív vizuális generátorunkat a cron karakterláncok biztonságos felépítéséhez és érvényesítéséhez.
Nyissa meg a Cron Job Generator programotA legveszélyesebb Cron hiba
A fejlesztők leggyakoribb és katasztrofális hibája a „Perc” mező összekeverése. Nézzünk meg egy forgatókönyvet, amikor egy adatbázis-tisztító parancsfájlt szeretne futtatni óránként egyszer, hajnali 2 órakor.
A hiba: * 2 * * *
Ha a fentieket írja, akkor azt mondja a szervernek, hogy futtassa le a "Minden percben, a nap 2. órájában" szkriptet. A nehéz adatbázis-tisztító parancsfájl egymás után 60-szor indul el, valószínűleg túlterheli a CPU-t, zárolja az adatbázistáblákat, és hatalmas leállást okoz.
A helyes út: 0 2 * * *
Ez kifejezetten azt mondja a szervernek, hogy csak a "2. óra nulladik percében" futtasson. Pontosan egyszer hajtódik végre hajnali 2 órakor.
Gyakran Ismételt Kérdések (GYIK)
A cron figyelembe veszi az időzónákat?
Alapértelmezés szerint a cron a kifejezéseket a futott kiszolgáló helyi rendszerideje alapján értékeli ki. Ha a szervere egy londoni AWS-régióban található, akkor UTC/GMT-n fut. Figyelembe kell vennie az időzónák közötti különbségeket, ha felhasználói New Yorkban vagy Tokióban vannak.
Beütemezhetek egy cron feladatot, hogy másodpercenként fusson?
Nem. A szabványos Unix cron egyperces felbontásra korlátozódik. Ha alpercenkénti ütemezésre van szüksége (pl. 10 másodpercenként), akkor külön démoneszközt kell használnia, vagy olyan szkriptet kell írnia, amely percenként fut, de belső ciklusokban alvó parancsokkal fut.
Mit jelentenek az olyan karakterláncok, mint a @daily vagy a @hourly?
A cron számos modern megvalósítása támogatja a nem szabványos előre meghatározott makrókat, hogy megkönnyítse az ütemezést. A @daily pontosan ugyanaz, mint a 0 0 * * * (minden nap éjfél). A @hourly ugyanaz, mint a 0 * * * *. Bár hasznosak, nem támogatottak minden régi rendszerben.