cron
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ě
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.
/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',
}
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 |