Zkontrolujte, zda programy, které spouštíte pomocí cronu, mají své vlastní soubory protokolu. Pokud ne, ale zapisují svůj výstup do standardních výstupů, můžete je přesměrovat do souborů nebo vám je poslat poštou. Uvnitř crontabs funguje standardní přesměrování shellu.
Např. k přesměrování chybového výstupu some_job.sh
do some_job.err
a zahození standardního výstupu (tj. odeslání na /dev/null
) přidejte do svého crontab následující přesměrování
33 3 * * * /path/to/some_job.sh 1> /dev/null 2> /other/path/to/some_job.err
nebo vám jej poslat poštou (pokud mail
je k dispozici)
33 3 * * * /path/to/some_job.sh 1> /dev/null 2>&1 | mail -s "cron output" [email protected]
Většina démonů cron na platformách, se kterými jsem pracoval, automaticky odešle stdout/stderr uživatelských úloh cron uživateli, z jehož crontab úloha přišla. Zapomněl jsem, co se stane s celým systémem (pro uživatele nespecifické úlohy cron z /etc/crontab). Jde o to, že lidé již na většině operačních systémů podobných Unixu nenastavují vždy poštovního démona (tj. Mail Transfer Agent (MTA) jako sendmail, qmail nebo postfix). Takže e-maily s výstupem úlohy cron prostě zemřou někde v místní složce pro zařazování pošty, pokud vůbec dostanou to daleko. Takže jednou odpovědí může být pouze spuštění vašeho poštovního démona a možná se ujistěte, že máte soubor ~/.forward pro přeposílání místní pošty na váš „skutečný“ e-mailový účet.
Pokud chcete, aby se vaše úlohy zapisovaly do konkrétních souborů protokolu, můžete použít standardní přesměrování výstupu, jako je doporučeno @honk, nebo za předpokladu, že vaše úloha cron je skript shellu, můžete nechat skript zavolat logger(1) nebo syslog(1) nebo jakýkoli jiný nástroj příkazového řádku, který váš operační systém poskytuje pro odesílání libovolných zpráv do syslog. Pak byste mohli použít vestavěné metody vašeho operačního systému pro konfiguraci, které druhy zpráv se kam zaznamenávají, například úpravou souboru /etc/syslog.conf.
Většina mých úloh cronu používá bash skripty, které jsem napsal speciálně za účelem spouštění cronem z určitého důvodu. V těch, zvláště když je zpočátku píšu a ladím, rád používám bashův "set -vx", aby se nerozbalená a rozšířená forma každého řádku skriptu shellu zapsala do stdout předtím, než se spustí. Všimněte si, že shellové skripty spouštěné z cronu jsou považovány za nepřihlašovací, neinteraktivní shelly, takže vaše standardní spouštěcí skripty shellu jako .bashrc a .profile se nespouštějí. Pokud používáte bash a chcete, aby bash spouštěl spouštěcí skript, musíte definovat proměnnou prostředí "BASH_ENV=/path/to/my/startup/script" v crontab před řádkem, kde definujete úlohu.
Úlohy, které cron provádí, jsou zodpovědné za své vlastní protokolování.