cron

From DCEwiki
Jump to: navigation, search

K plánovanému spouštění skriptů, v předem nastavených pravidelných intervalech, se v linuxu používá démon cron. Ten běží trvale na pozadí a zhruba každou minutu kontroluje obsah konfiguračních souborů zda-li pro daný čas nemají naplánovanou nějakou úlohu ke spuštění.

Konfigurační soubory, které kontroluje se mohou vyskytovat na několika místech. Výchozím konfiguračním souborem, který obsahuje plánované úlohy, které zajišťujících pravidelnou kontrolu a údržbu systému, je /etc/crontab. Mimo něj ale cron prohledává také obsah podadresářů v /var/spool/cron/crontabs/, kde jsou uloženy konfigurační soubory s naplánovanými úlohami jednotlivých uživatelů.

Debian však kromě těchto konfiguračních souborů zpracovává také se soubory z dalších, pro něj specifických adresářů:

/etc/cron.d/ 
Obsahuje konfigurační soubory cronu, které jsou součástí instalačních balíčků. Např. součástí php5-common je konfigurační skript cronu, který v určitou dobu provádí údržbu PHP a jeho skriptů.
/etc/cron.daily/ 
Obsahuje skripty které se mají spouštět každý den
/etc/cron.hourly/ 
Obsahuje skripty které se mají spouštět každou hodinu
/etc/cron.monthly/ 
Obsahuje skripty které se mají spouštět jednou měsíčně
/etc/cron.weekly/ 
Obsahuje skripty které se mají spouštět jednou týdně
Poznámka Na rozdíl od konfiguračních souborů cron z adresářů, jejichž název specifikuje interval spouštění, skripty rovnou spouští. Akceptuje přitom i symlinky na skripty v jiné lokaci.

Uživatelské plánování spouštění úloh[edit]

Úlohy se do uživatelských konfiguračních souborů nepřidávají jejich přímou editací, ale editací prostřednictvím aplikace crontab. Ta při prvním spuštění pro uživatele vytvoří samostatný soubor crontabs v podadresáři s jeho uživatelským jménem v rámci /var/spool/cron/crontabs/ a pak tento soubor otevře k editaci.

Použití plánovače úloh lze omezovat na základě uživatelského jména
/etc/cron.allow 
pokud existuje tento soubor, mohou úlohy pro cron plánovat pouze uživatelé zde uvedení
/etc/cron.deny 
pokud existuje tento soubor, tak úlohy pro cron mohou vytvářet pouze uživatelé co v něm nejsou uvedení


Syntaxe[edit]

Pro naplánování úlohy je podstatné vědět, jak cron pracuje s časem. Na řádku, kterým je plánováno spouštění úlohy, určuje prvních pět položek, oddělených mezerami, čas kdy má cron vykonat kód, který za nimi následuje. Ve výchozím stavu je na místě každé z nich hvězdička. Ta zastupuje každou číselnou hodnotu. Úlohu, načasovanou tak jak je uvedeno v následujícím příkladu, by cron spouštěl každou minutu.

Poznámka
* * * * *  /path/example.sh

Každá z položek však má svůj význam a přípustný rozsah:

  1. minuta (0-59)
  2. hodina (0-23)
  3. den v měsíci (1-31)
  4. měsíc v roce (1-12)
  5. den v týdnu (1-7) - 1 je pondělí
Upozornění Číselnou hodnotu, která není z tohoto rozsahu vyhodnotí cron jako chybu
Spouštění v určitý čas[edit]
23 * * * * 
Bude-li místo první hvězdičky uvedeno kupř. číslo 23, pak bude cron skript /path/example.sh spouštět co hodinu, v každou dvacátoutřetí minutu.
1,23,37 * * * * 
Čísel může být uvedeno i více, musí ale být odděleny čárkou. S uvedenými hodnotami by byl skript /path/example.sh spouštěn každou hodinu, vždy v určenou minutu.
*/3 * * * * 
Má-li se spouštění realizovat opakovaně v pravidelném intervalu, pak se za hvězdičku oddělena lomítkem zapíše délka příslušného časového intervalu. V tomto případě by se skript /path/example.sh spouštěl opakovaně co tři minuty.
1-10 * * * * 
Vymezením rozsahu lze nastavit, aby se úloha spouštěla opakovaně po dobu platnosti intervalu. Takto definovaná úloha by se opakovaně spouštěla každou hodinu po dobu prvních deseti minut
Podmíněné spouštění úloh[edit]

Cron sám o sobě neřeší co dělá kód v úloze. Proto pokud se má spouštět něco co samo o sobě Podmíněné spuštění úlohu obsahuje již předchozí příklad konfigurace, který zjišťuje zda-li již v některém procesu skript s názvem example.sh neběží.

Poznámka
* * * * *  /usr/sbin/pgrep example.sh ; [ $? != 0 ] && /path/example.sh

Podmínek však lze využívat i jiným způsobem - kupř. tehdy, je-li spuštění skriptu závislé na existenci adresáře, který se nachází na vzdáleném úložišti. Není-li v okamžiku spuštění úlohy úložiště k dispozici, místo spuštění zálohovacího procesu cron odešle e-mail s upozorněním.

Poznámka
* 2,5 * * * [ -d /cesta/k/adresáři ] && /volat/tento/skript || mail user@stroj

Konfigurace plánované úlohy cronu prostřednictvím puppet agenta[edit]

Poznámka
cron { 'update_cron':
    ensure  => 'present',
    command => '[ -d /cesta/k/adresáři ] && /volat/tento/skript || mail user@stroj',
    user => 'root', 
    hour => [ 23, 5 ], 
}
Upozornění Nastavení hodin v desetinném tvaru se provádí formou pole, nikoliv s použitím čárky, tak jak je tomu pak v konfiguračním souboru editovatelném přes crontab