it-swarm-eu.dev

Proč se můj crontab nespustil?

Použil jsem crontab -e přidat do mého crontabu následující řádek:

* * * * * echo hi >> /home/myusername/test

Přesto nevidím, do kterého je testovací soubor zapsán. Je to problém s povolením nebo nefunguje crontab správně?

Vidím, že proces cron běží. Jak to mohu odladit?

Upravit - Zeptejte se Ubuntu má pěkná otázka o crontab , bohužel mi to stále nepomůže.

Edit 2 - Hmm, zdá se, že můj testovací soubor má 214 řádků, což znamená, že za posledních 214 minut byl zapsán každou minutu. Nejsem si jistý, v čem byl problém, ale je zjevně pryč.

29
ripper234

Existují implementace cron (ne všechny, a já si nevzpomínám, které offhand, ale narazil jsem na jednu pod Linuxem), které kontrolují aktualizované crontab soubory každou minutu za minutu a nezohledňují nové záznamy do příští minuty. Proto může crontab trvat až dvě minuty, než se poprvé rozhoří. To je to, co jste pozorovali.

28
gelraen

Měl jsem stejný problém - pracovní crontab se náhle zastavil poté, co jsem na konci přidal nový záznam. Ukázalo se, že jsem zapomněl vložit nový řádek za poslední řádek.

Zjistil jsem to vydáním příkazu

cat /var/log/syslog | grep crontab

a výstup ukázal problém:

Jul  2 08:16:01 shiva cron[1254]: (*system*) RELOAD (/etc/crontab)
Jul  2 08:16:01 shiva cron[1254]: (*system*) ERROR (Missing newline before EOF, this crontab file will be ignored)

Problém byl vyřešen přidáním nového řádku a uložením.

10
uniomni

Zní to takto. Příště zkuste také protokolovat STDERR. Následující se přihlásí pouze do STDOUT, nikoli STDERR:

* * * * * echo hi >> /home/myusername/test

Zkuste se také ujistit, že existuje explicitní klauzule pro STDERR. V opačném případě může být STDERR uživateli zaslán e-mailem (za předpokladu, že e-mail funguje), nebo může jít kamkoli, podle toho, jak je nakonfigurován Cron.

* * * * * echo hi >> /home/myusername/test 2> /home/myusername/test.stderr

Moje preference je poslat výstup cronjob do syslogu. Tímto způsobem využívám veškerou existující infrastrukturu syslogu (centralizované syslogy, Splunk, rotace protokolu již podporována, je snadné porovnávat zprávy v/var/log/messages &/var/log/cronjob atd.) A nejsem spamování sysadminů (mě) zbytečnými e-maily.

* * * * * echo hi >> /home/myusername/test 2>&1 | /usr/bin/logger -t mycronjob
5
Stefan Lasiewski

Se mnou byl problém v tom, že skript nebyl spustitelný. Měl jsem crontab -e nastavení takhle

* * * * * /bin/my-script.sh

A soubor myscript nebyl spustitelný, takže jsem běžel

chmod +x my-script.sh

Okamžitě jsem začal vidět výstup podle očekávání.

2
santiago arizti

Myslím, že jedním z důvodů může být to, že adresář/home/je šifrován a když je uživatel odhlášen, cron není schopen v tomto adresáři nic dělat.

viz: https://stackoverflow.com/a/40354269/1279002

1
theINtoy

Vaše cronova linka funguje v mém počítači dobře, když změním myusernae na phunehehe. Existuje několik způsobů, jak zjistit, co je špatného na vašem systému.

Cron obvykle posílá poštu uživateli, když se něco stane. Pokud se zobrazí zpráva „Máte poštu“, použijte poštovního klienta k zkontrolujte doručenou pošt . Nebo se podívejte do domovského adresáře, může existovat soubor s názvem dead.letter tam.

Můžeš zkontrolovat /var/log/ pro záznamy týkající se cron. V mém počítači je soubor protokolu na /var/log/cron/current (vyžaduje přístup root).

Pokud máte přístup root, můžete zastavit démona cron a spustit jej v ladicím režimu. Například bych použil (změňte fcron na jméno vašeho démona):

killall fcron
fcron --foreground --debug
1
phunehehe

Nejpravděpodobněji, když cron selže, vygeneruje e-mail na uživatelské ID úlohy cron v tomto počítači. Pokud v počítači nemáte MTA nebo pokud tuto poštu nečtete nebo nepředáváte jinam, tuto zprávu neuvidíte, i když MTA funguje.

Dobrým způsobem, jak získat chyby crontab e-mailem, je, aby váš crontab vypadal takto:

MAILTO="[email protected]"
* * * * * echo hi >> /home/myusernae/test

Zjevně použijte svou e-mailovou adresu, nikoli [email protected] To poví cronu, aby poslal chyby na vaši e-mailovou adresu, nikoli na místní účet. To je užitečné zejména v případě, že máte root crontab (nebo crontab fragment v /etc/cron.d), který vám chce pouze poslat výstup, můžete se vyhnout nevyžádané poštovní schránce root nebo předávací adrese root.

1
jsbillings