it-swarm-eu.dev

Kde jsou zaznamenány chyby cronu?

Pokud nastavím úlohy cron nesprávně, zdá se, že tiše selžou. Kde bych měl vyhledat protokol chyb, abych pochopil, co se stalo?

182
Brian Lyttle

Jak zdůraznili ostatní, cron vám pošle e-mailem výstup jakéhokoli programu, který spustí (pokud existuje nějaký výstup). Pokud tedy nemáte žádný výstup, existují v zásadě tři možnosti:

  1. crond nemohl ani spustit prostředí pro spuštění programu nebo odesílání e-mailů
  2. crond měl potíže s odesláním výstupu nebo došlo ke ztrátě pošty.
  3. program nevytvořil žádný výstup (včetně chybových zpráv)

Případ 1 je velmi nepravděpodobný, ale něco mělo být zapsáno do logů cronů. Cron má vlastní vyhrazené zařízení syslog, takže byste se měli podívat do /etc/syslog.conf (nebo ekvivalentní soubor ve vašem distro), abyste viděli, kam jsou posílány zprávy zařízení cron. Mezi oblíbené destinace patří /var/log/cron, /var/log/messages a /var/log/syslog.

V případě 2. byste měli zkontrolovat protokoly démonů mailer: zprávy z démona Cron se obvykle objeví jako z [email protected]. Můžete použít MAILTO=... řádek v souboru crontab, aby cron poslal e-mail na konkrétní adresu, což by mělo usnadnit grep protokoly démonů mailera. Například:

[email protected]
00 15 * * *  echo "Just testing if crond sends email"

V případě 3. můžete vyzkoušet, zda byl program skutečně spuštěn připojením dalšího příkazu, jehož účinek můžete snadno zkontrolovat: například

00 15 * * * /a/command; touch /tmp/a_command_has_run

takže si můžete zkontrolovat, zda crond skutečně něco spustil, když se podíváte na čas /tmp/a_command_has_run.

116
Riccardo Murri

Výstup úlohy můžete vždy explicitně odeslat do souboru protokolu:

0 8 * * * /usr/local/bin/myjob > /var/log/myjob.log 2>&1

Mějte na paměti, že to nahradí chování pošty, které bylo zmíněno dříve, protože crond sám nedostane žádný výstup z úlohy. Pokud si chcete zachovat toto chování, měli byste se podívat do odpaliště (1).

54
codehead

Pokud e-maily nevidíte, může se jednat o nevyžádanou poštu root @ yourcompany s chybami, které mohou být docela nepříjemné pro lidi, kteří tento účet používají pro monitorování. Zkuste místo toho odeslat výstup na Syslog:

*/5 * * * * yourcronjob 2>&1 | /usr/bin/logger -t yourtag

Poté počkejte na spuštění cronjob a vyhledejte chybu v/var/log/messages (nebo /var/log/user.log v některých systémech).

To funguje skvěle pro chybové zprávy, které jsou dlouhé pouze 1 až 2 řádky, například „yourcronjob: příkaz nebyl nalezen“. Využívá také vaši existující infrastrukturu syslogu (Logrotace, centrální syslogging, Splunk atd.). Také snižuje emailový spam na root.

To nemusí být dobré řešení, pokud vaše cronjob generuje stovky řádků výstupu.

44
Stefan Lasiewski

Měli byste dostat e-mail od crond, když se úloha nezdaří nebo když úloha vrátí nenulový ukončovací kód. Zkuste napsat:

$ mailx

na příkaz Prompt.

mailx(1) je základní program pro čtení pošty ve většině unixových systémů. Podle moderních standardů je velmi primitivní, ale můžete se spolehnout, že bude vždy k dispozici. Mohou být k dispozici další lepší poštovní agenti, ale je jich dost, že nikdy nevíte, který z nich je nainstalován na nějakém náhodném počítači, který náhodou používáte.

Upozorňujeme, že pokud jste nenakonfigurovali svůj systém jako internetový e-mailový server, tento poštovní subsystém se používá pouze ve stroji. Můžete posílat e-maily a přijímat od ostatních uživatelů ve stroji, ale možná nebudete moci poslat e-mail do světa a e-mail z vnějšího světa rozhodně nebude schopen přijít do vašeho stroje.

8
Warren Young

Výchozí konfigurace cronu vám pošle e-mail s výstupem z vašeho programu. Pokud se to nezdaří, můžete zkusit zabalit neúspěšný program skriptem Shell, který zajistí, že program nezklame, a můžete výstup dále protokolovat.

Toto je konfigurovatelné nastavení některých implementací cron.

8
miguel.de.icaza

Cron zaznamenává základní informace do /var/log/messages, ale pošle jakýkoli výstup programu vyvolávajícímu uživateli.

5
Hemant

Narazil jsem na toto vlákno před několika lety, kdy došlo ke stejným problémům, a právě nedávno jsem narazil na řešení výše uvedených případů Ricarda. Nedostatek e-mailu je obtížné zjistit (jak jste zmínil) a rozhodně nechcete spamovat kořenový e-mail vaší společnosti. Pokud máte zájem, podívejte se na deadmanssnitch.com. . Zdá se, že tento nástroj řeší výše uvedené případy. Vypadá to, že se používá velmi jednoduše - stačí přidat kousek kódu, který vám nástroj poskytne k vašemu cronjob. Pokud se vaše úloha nepodaří spustit v určené interní, budete upozorněni. Pokud se úloha znovu spustí, budete také upozorněni.

2
ss_jt

Používám vixie-cron, takže nevím, jestli se to vztahuje na všechno. Ale mám dead.letter soubor, který obsahuje veškerý výstup úlohy.

V mém /root/ Složka mám crons.cron které jsem nastavil jako svůj crontab spuštěním crontab /root/crons.cron. dead.letter bude vytvořeno v /root/ také.

pravit Jen jsem Google dead.letter, a je to nedoručitelná pošta. Zřejmě nemá nic společného s cronem. Pokud nemáte správně nastavenou poštu (jako já), budete mít soubor.

1
jonescb

Dalším užitečným trikem je zjistit, jaké skripty jsou ve skutečnosti prováděny.

To se provádí pomocí run-parts -v --test /etc/cron.hourly/

> /etc/cron.hourly//logrotate

Pokud se váš skript nezobrazí, nebude proveden.

Tento btw funguje pouze pro skripty nainstalované v /etc/cron.hourly adresář. Nezobrazuje vám položky, které jsou nastaveny ve vašem crontab.

1
RickyA

Pro nováčky to může být bolest, kterou je třeba ladit. Nezapomeňte si vyměňovat hodnoty minut a hodin. Minuta je první, pak hodina. Pokud pro každou z nich zadáte hodnoty menší než 12, přijme je, ale nemusí fungovat podle očekávání nebo vůbec.

0
Michael Woyo