Cron je plánovací démon, který provádí úlohy v určených intervalech. Tyto úlohy se nazývají úlohy cron a většinou se používají k automatizaci údržby nebo správy systému.
Můžete například nastavit úlohu cron pro automatizaci opakujících se úloh, jako je zálohování databází nebo dat, aktualizace systému nejnovějšími bezpečnostními záplatami, kontrola využití místa na disku, odesílání e-mailů a tak dále.
Spouštění úloh cron lze naplánovat na minutu, hodinu, den v měsíci, měsíc, den v týdnu nebo jakoukoli jejich kombinaci.
Co je soubor Crontab #
Crontab (tabulka cron) je textový soubor, který specifikuje plán úloh cron. Existují dva typy souborů crontab. Soubory crontab pro celý systém a soubory crontab jednotlivých uživatelů.
Soubory crontab uživatelů jsou pojmenovány podle jména uživatele a jejich umístění se liší podle operačních systémů. V distribucích založených na Red Hatu, jako je CentOS, jsou soubory crontab uloženy v /var/spool/cron
adresář, zatímco na Debianu a Ubuntu jsou soubory uloženy v /var/spool/cron/crontabs
adresář.
Přestože můžete uživatelské soubory crontab upravovat ručně, doporučuje se použít crontab
příkaz.
Soubor /etc/crontab
a skripty v /etc/cron.d
adresář jsou systémové soubory crontab, které mohou upravovat pouze správci systému.
Ve většině distribucí Linuxu můžete skripty vkládat také do /etc/cron.{hourly,daily,weekly,monthly}
adresáře a skripty se budou spouštět každou hour/day/week/month
.
Syntaxe a operátory Crontab #
Každý řádek v uživatelském souboru crontab obsahuje šest polí oddělených mezerou následovanou příkazem, který má být spuštěn.
* * * * * command(s)
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)
Prvních pět polí může obsahovat jednu nebo více hodnot oddělených čárkou nebo rozsahem hodnot oddělených pomlčkou.
*
- Operátor hvězdička znamená jakoukoli hodnotu nebo vždy. Pokud máte v poli Hodina symbol hvězdičky, znamená to, že úkol bude proveden každou hodinu.,
- Operátor čárka umožňuje zadat seznam hodnot pro opakování. Pokud máte například1,3,5
v poli Hodina se úloha spustí v 1:00, 3:00 a 5:00.-
- Operátor pomlčky umožňuje zadat rozsah hodnot. Pokud máte1-5
v poli Den v týdnu bude úloha spuštěna každý pracovní den (od pondělí do pátku)./
- Operátor lomítka umožňuje zadat hodnoty, které se budou v určitém intervalu mezi nimi opakovat. Pokud máte například*/4
v poli Hodina to znamená, že akce bude provedena každé čtyři hodiny. Je to stejné jako zadání0,4,8,12,16,20
. Místo hvězdičky před operátorem lomítka můžete také použít rozsah hodnot1-30/10
znamená totéž jako1,11,21
.
Soubory Crontab pro celý systém #
Syntaxe celosystémových souborů crontab se mírně liší od uživatelských crontabů. Obsahuje další povinné uživatelské pole, které určuje, který uživatel spustí úlohu cron.
* * * * * <username> command(s)
Předdefinovaná makra #
K určení společných intervalů se používá několik speciálních plánovacích maker Cron. Tyto zkratky můžete použít místo pětisloupcové specifikace data.
@yearly
(nebo@yearly
) - Spusťte zadanou úlohu jednou ročně o půlnoci (00:00) 1. ledna. Ekvivalent0 0 1 1 *
.@monthly
- Spusťte zadanou úlohu jednou za měsíc o půlnoci prvního dne v měsíci. Ekvivalent0 0 1 * *
.@weekly
- Spusťte zadanou úlohu jednou týdně v neděli o půlnoci. Ekvivalent0 0 * * 0
.@daily
- Spusťte zadanou úlohu jednou denně o půlnoci. Ekvivalent0 0 * * *
.@hourly
- Spusťte zadanou úlohu jednou za hodinu na začátku hodiny. Ekvivalent0 * * * *
.@reboot
- Spusťte zadanou úlohu při spuštění systému (při spuštění).
Příkaz Linux Crontab #
crontab
umožňuje nainstalovat, zobrazit nebo otevřít soubor crontab pro úpravy:
crontab -e
– Upravte soubor crontab nebo jej vytvořte, pokud ještě neexistuje.crontab -l
- Zobrazit obsah souboru crontab.crontab -r
- Odeberte aktuální soubor crontab.crontab -i
- Před odstraněním odeberte aktuální soubor crontab s výzvou.crontab -u <username>
- Upravit soubor crontab jiného uživatele. Tato možnost vyžaduje oprávnění správce systému.
Příkaz crontab otevře soubor crontab pomocí editoru určeného VISUAL
nebo EDITOR
proměnné prostředí.
Proměnné Crontab #
Démon cron automaticky nastavuje několik proměnných prostředí.
- Výchozí cesta je nastavena na
PATH=/usr/bin:/bin
. Pokud se příkaz, který provádíte, nenachází v zadané cestě cronu, můžete buď použít absolutní cestu k příkazu, nebo změnit cron$PATH
variabilní. Nemůžete implicitně připojit:$PATH
jako byste to udělali s běžným skriptem. - Výchozí prostředí je nastaveno na
/bin/sh
. Chcete-li změnit jiný shell, použijteSHELL
proměnná. - Cron vyvolá příkaz z domovského adresáře uživatele.
HOME
proměnnou lze nastavit v crontab. - E-mailové upozornění je odesláno vlastníkovi crontab. Chcete-li přepsat výchozí chování, můžete použít
MAILTO
proměnná prostředí se seznamem (odděleným čárkou) všech e-mailových adres, na které chcete dostávat e-mailová upozornění. KdyžMAILTO
je definován, ale prázdný (MAILTO=""
), není odeslána žádná pošta.
Omezení Crontab #
Soubor /etc/cron.deny
a /etc/cron.allow
souborů umožňuje řídit, kteří uživatelé mají přístup k crontab
příkaz. Soubory se skládají ze seznamu uživatelských jmen, jedno uživatelské jméno na řádek.
Ve výchozím nastavení pouze /etc/cron.deny
soubor existuje a je prázdný, což znamená, že příkaz crontab mohou používat všichni uživatelé. Pokud chcete konkrétnímu uživateli odepřít přístup k příkazům crontab, přidejte uživatelské jméno do tohoto souboru.
Pokud /etc/cron.allow
soubor existuje pouze uživatelé, kteří jsou uvedeni v tomto souboru, mohou používat crontab
příkaz.
Pokud žádný ze souborů neexistuje, mohou crontab
používat pouze uživatelé s oprávněními správce příkaz.
Příklady úloh Cron #
Níže jsou uvedeny příklady úloh cron, které ukazují, jak naplánovat spuštění úlohy v různých časových obdobích.
-
Spusťte příkaz v 15:00 každý den od pondělí do pátku:
0 15 * * 1-5 command
-
Spustit skript každých 5 minut a přesměrovat standardní výstup na
dev null
, na zadanou e-mailovou adresu bude odeslána pouze standardní chyba:[email protected] */5 * * * * /path/to/script.sh > /dev/null
-
Spusťte dva příkazy každé pondělí v 15:00 (použijte operátor
&&
mezi příkazy):0 15 * * Mon command1 && command2
-
Spusťte PHP skript každé 2 minuty a zapište výstup do souboru:
*/2 * * * * /usr/bin/php /path/to/script.php >> /var/log/script.log
-
Spusťte skript každý den, každou hodinu, každou hodinu, od 8:00 do 16:00:
00 08-16 * * * /path/to/script.sh
-
Spusťte skript každé první pondělí v měsíci v 7:00
0 7 1-7 * 1 /path/to/script.sh
-
Spusťte skript a ve 21:15, 1. a 15. dne každého měsíce:
15 9 1,15 * * /path/to/script.sh
-
Nastavte vlastní
HOME
,PATH
,SHELL
aMAILTO
proměnné a každou minutu spusťte příkaz.HOME=/opt PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin SHELL=/usr/bin/zsh [email protected] */1 * * * * command
Závěr č.
Cron je démon, který vám umožňuje plánovat úkoly na konkrétní datum a čas.
Pokud máte nějaké dotazy, neváhejte zanechat komentář.