Tools Blog

Porozumění cronovým výrazům: Praktický průvodce automatizací úloh

Cron Job Automation

Pokud jste někdy spravovali linuxový server, pracovali na vývoji backendu nebo nastavovali automatické cloudové funkce, pravděpodobně jste narazili na řetězec, který vypadá asi takto: 0 2 * * *. Pro nezasvěcené to vypadá na překlep zanechaný na klávesnici. Pro systémové administrátory je to srdce moderní automatizace infrastruktury: Cron Expression.

Cron je neviditelný motor běžící na internetu. Zajišťuje zálohování vaší databáze ve 3:00, spouští e-maily, které obdržíte každé pondělí ráno, a vymaže dočasné soubory serveru dříve, než zhroutí systém. Ale navzdory své síle je pro lidi notoricky obtížné syntaxi analyzovat. V tomto hlubokém ponoru demystifikujeme hvězdičky a naučíme vás, jak číst a psát plány cron jako zkušený inženýr DevOps.

Co je Cron a Crontab?

Cron je časový plánovač úloh, který se nachází v počítačových operačních systémech podobných Unixu. Název „cron“ pochází z řeckého slova pro čas, chronos. Uživatelé, kteří nastavují a udržují softwarová prostředí, používají cron k plánování úloh (příkazů nebo skriptů shellu), aby se spouštěly pravidelně v pevně stanovených časech, datech nebo intervalech.

Crontab (Cron Table) je konfigurační soubor, kde jsou tyto plány uloženy. Když upravujete svůj crontab přes terminál, píšete seznam instrukcí, které serveru přesně říkají, co a kdy má provést.

Dekonstrukce 5 hvězdiček

Standardní cron výraz se skládá z 5 polí oddělených mezerou. Každé pole představuje určitou časovou jednotku a vždy se čte zleva doprava v tomto přesném pořadí:

* * * * *  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)

Hvězdička (*) znamená "všechny možné hodnoty pro toto pole". Takže výraz * * * * * doslova znamená: "Běhejte každou minutu, každou hodinu, každý den, každý měsíc, každý den v týdnu."

Modifikátory syntaxe: kroky, rozsahy a seznamy

Síla cronu pochází z jeho modifikátorů. Nejste omezeni jen na konkrétní čísla nebo „všechno“.

1. Modifikátor kroku (/)

Pokud chcete, aby se skript spouštěl každých 15 minut, použijte krok. */15 * * * * znamená "každou minutu, která je dělitelná 15". Poběží v 0, 15, 30 a 45 po celou hodinu.

2. Modifikátor rozsahu (-)

Pokud chcete, aby se skript spouštěl pouze během pracovní doby, použijte rozsah. 0 9-17 * * * znamená „běžet v minutu nula, každou hodinu od 9:00 do 17:00“.

3. Modifikátor seznamu (,)

Pokud chcete, aby něco běželo v určité dny, které se nedají po sobě následovat, použijte seznam. 0 0 1,15 * * znamená „běží o půlnoci 1. a 15. dne v měsíci“.

Přestaňte hádat Cronovy výrazy

Neriskujte spouštění záložního skriptu každou minutu místo každého měsíce. Jediný překlep může způsobit selhání produkčního serveru. Použijte náš interaktivní vizuální generátor k bezpečnému vytváření a ověřování cronových řetězců.

Otevřete Cron Job Generator

Nejnebezpečnější Cron chyba

Nejčastější a katastrofální chybou, které se vývojáři dopouštějí, je záměna pole „Minuta“. Podívejme se na scénář, kdy chcete spustit skript pro vyčištění databáze jednou za hodinu ve 2:00.

Chyba: * 2 * * *

Pokud napíšete výše, říkáte serveru, aby spustil skript "Každou minutu, během 2. hodiny dne". Váš skript pro náročné čištění databáze se spustí 60krát za sebou, což pravděpodobně přetíží váš procesor, uzamkne tabulky databáze a způsobí masivní výpadek.

Správný způsob: 0 2 * * *

To explicitně říká serveru, aby běžel pouze v "minutu nula, 2. hodiny". Provede se přesně jednou ve 2:00.

Často kladené otázky (FAQ)

Zohledňuje cron časová pásma?

Ve výchozím nastavení cron vyhodnocuje výrazy na základě místního systémového času serveru, na kterém běží. Pokud je váš server hostován v oblasti AWS v Londýně, běží v UTC/GMT. Pokud jsou vaši uživatelé v New Yorku nebo Tokiu, musíte počítat s rozdíly v časových pásmech.

Mohu naplánovat spouštění úlohy cron každou sekundu?

Ne. Standardní unixový cron je omezen na jednominutové rozlišení. Pokud potřebujete plánování pod minutu (např. každých 10 sekund), musíte použít samostatný nástroj démona nebo napsat skript, který se spouští každou minutu, ale interně se zacyklí s příkazy spánku.

Co znamenají řetězce jako @daily nebo @hourly?

Mnoho moderních implementací cronu podporuje nestandardní předdefinovaná makra, aby bylo plánování jednodušší. @daily je přesně to samé jako 0 0 * * * (každý den o půlnoci). @hourly je totéž jako 0 * * * *. I když jsou užitečné, nejsou univerzálně podporovány ve všech starších systémech.