Z Multihost.cz
Cron je nástroj sloužící pro automatické spouštění programů a skriptů v pravidelných intervalech. To se hodí například pro úkony údržby, pročišťování cache, tvorbu statistik a podobné věci. Řídí se záznamy v takzvané crontab (více níže).
Z důvodů omezení zátěže serveru pracuje náš cron s minimálním intervalem pět minut (všechny časy jsou zaokrouhleny na celé pětiminuty).
Editace crontab
Vaši crontab můžete editovat buď prostřednictvím administrace (sekce Crontab záznamy) nebo přes ssh příkazem crontab -e (jen pro pokročilé uživatele, kteří umí používat vim, nebo si změnit proměnou EDITOR).
Syntaxe crontab
Představte si cron jako úředníka, kterému každých pět minut zazvoní budík, on se podívá postupně na všechny záznamy a porovná je s aktuálním časem podle pravidel popsaných níže. Čas se porovnává po složkách - tj. nezávisle na sobě se porovná aktuální minuta s kritérii v políčku minuta, aktuální hodina s podmínkami políčka hodina, atd. A pokud všechny vyhovují, spustí příslušný příkaz.
Každý záznam se skládá z pěti položek: minuta (0-59), hodina (0-23), den v měsíci (1-31), měsíc (1-12), den v týdnu (1=pondělí-7=neděle), plus spouštěný příkaz. Podle prvních pěti se rozhoduje, kdy se má daný příkaz spustit. V každé položce může být napsáno:
- číslo. Pak se příkaz spustí jen pokud aktuální hodnota přesně odpovídá tomuto číslu (v případě minut zaokrouhlenému dolů na nejbližší násobek pěti). Například pokud v políčku minuta je hodnota
0, spustí se příkaz jedině v celou hodinu (to může být samozřejmě omezeno ještě dalšími podmínkami). - rozsah, tedy dvě čísla oddělená pomlčkou. Např.
12-17v políčku hodina způsobí, že se příkaz bude spouštět jen od dvanácté do sedmnácté hodiny včetně (nebude-li omezen ničím dalším, každých pět minut) - hvězdička (
*) značí libovolnou hodnotu. Například hvězdička v poli den znamená, že při vyhodnocování nezáleží na tom, kolikátého je (příkaz se spustí v libovolný den). Speciálně pak uvedete-li hvězdičku v poli minuta, nespouští se příkaz každou minutu, ale každých pět - rozsah s vynecháním hodnot: zápis rozsahu (dvě čísla oddělená pomlčkou, nebo hvězdička), lomítko a číslo (n). Funguje zhruba tak, že z rozsahu vybere každou n-tou hodnotu. Běžně se používá např.
*/2pro každou sudou. - několik věcí oddělených čárkou vše z výše uvedeného se dá spojovat. Tedy například
8-12/2,16,22v políčku hodina znamená, že se příkaz bude spouštět dopoledne každé dvě hodiny, a navíc ještě v 16 a 22 hodin.
Výše popsaná pravidla mají z historických důvodů jednu výjimku: pokud jsou omezeny hodnoty den v měsíci i den v týdnu současně (v obou je něco jiného než hvězdička), stačí, aby vyhovovala jen jedna z nich. To znamená, že není možné vytvořit pravidlo, které se spustí každý pátek třináctého --- protože 0 0 13 * 5 by se spustilo každý pátek a každého třináctého. Tento přežitek zachováváme z důvodů zpětné kompatibility (a protože nevěříme, že by někdo opravdu potřeboval spouštět příkazy každý pátek třináctého).
Příklady
Spuštění skriptu každou celou hodinu:
0 * * * * php /my/mujskript.php
Načtení webové stránky ve čtyři ráno každou neděli:
0 4 * * 7 web "http://mujweb.cz/clean.php"
(Používání příkazu web se nedoporučuje, zbytečně zatězuje server, skýtá mnohá bezpečnostní rizika a případné problémy se u něj daleko hůře diagnostikují. Pokud je to možné (a téměř vždy je) spouštějte skripty přímo, jako v příkladu výše.)
Spuštění na Štědrý večer (v 18:30):
30 18 24 12 * echo "Nezapomeň na Vánoce!" |sendmail my@address.example