cron

Z DCEwiki
Skočit na navigaci Skočit na vyhledávání

Pro plánované spouštění skriptů v předem nastavených pravidelných intervalech se používá démon cron. Ten běží trvale na pozadí a skripty spouští na základě konfigurace v souborech, které jsou uloženy na několika místech.

Základním konfiguračním souborem pro spouštění skriptů, zajišťujících pravidelnou kontrolu a údržbu systému, je /etc/crontab. Kromě něj ale cron prohledává také obsah podadresářů v /var/spool/cron/crontabs/, kde se ukládají konfigurační soubory uživatelů.

Kromě těchto konfiguračních souborů však u Debianu cron pracuje také se soubory umístěnými do 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

Ú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

Pro naplánování úlohy je podstatné vědět, jak cron pracuje s časem. Pro specifikaci intervalu je vyhrazeno prvních pět pozic řádku, oddělených mezerami - kde je ve výchozím stavu každá z nich zastoupena hvězdičkou. Za nimi pak následuje buď rovnou cesta k shellovému skriptu, nebo podmínky na jejichž základě se má úloha spustit.

Každá hvězdička, zastupuje jednu z položek specifikujících časový okamžik kdy má dojít ke spuštění, v následujícím pořadí: minuta, hodina, den, týden, rok. Ve výchozím stavu znamená, že ke spuštění úlohy může cron přikročit ihned, jakmile přijde na řadu

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

Přesný okamžik spuštění úlohy je specifikován pořadovým číslem příslušné položky. Bude-li místo první hvězdičky uvedeno číslo "1", pak bude cron úlohu spouštět co hodinu, každou první minutu.

Chceme-li úlohu spouštět opakovaně každých 10 minut, je třeba za hvězdičku zapsat lomítko a délku příslušného časového intervalu "*/10". Totéž platí pro všechny následující položky.

U jednotlivých položek lze použít také desetinou čárku. Podle následující konfigurace by došlo ke spuštění skriptu ... každý den přesně ve 23:30

0 23,5 * * * /usr/bin/php5 /home/nicovs/update_cron.php

Totéž lze zapsat i takto

30 23 * * * /usr/bin/php5 /home/nicovs/update_cron.php

Podmíněné spouštění úloh

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ěží.

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.

*/2 * * * [ -d /cesta/k/adresáři ] && /volat/tento/skript || mail kapica@fel.cvut.cz

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

cron { 'update_cron':
    ensure  => 'present',
    command => '/usr/bin/php5 /home/nicovs/update_cron.php',
    user => 'nicovs', 
    hour => [ 23, 5 ], 
    minute => '30', 
}
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