it-swarm.dev

Ověřte, zda crontab funguje

Chci ověřit, zda určitý crontab funguje správně. Přidal jsem práci takto:

  */2 * * * * /path_to_my_php_script/info.php >/dev/null 2>&1

Vím, že přesměrovávám na nulové zařízení, ale nevím, zda je výše uvedený příkaz dobrý.

* Edit 1: V mém/var/log/syslog každé dvě minuty mám následující chybu:

 (CRON) error (grandchild #2788 failed with exit status 2)

* Upravit 2: Žádné chyby v protokolech s touto novou úlohou:

 */2 * * * * /usr/bin/php /path_to_my_php_script/info.php >/dev/null 2>&1
88
croppio.com

Syntaxe záznamu crontab vypadá správně. Opravdu, pokud upravujete svůj crontab pomocí "crontab -e "(jak byste měli), zobrazí se chyba, pokud přesto zadáte syntakticky neplatný záznam crontab.

  1. Za prvé, dělá /path_to_my_php_script/info.php spustit správně z příkazového řádku?

  2. Pokud ano, běží také správně takto:

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null)"
    
  3. Pokud to funguje, funguje to takto?

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null >/dev/null 2>&1)"
    

Krok (3) je podobný tomu, jak cron spustí váš program (jak je uvedeno v „man 5 cron“).

Nejpravděpodobnějším problémem je, že cron PATH používá ke spuštění programu příliš restriktivní. Proto byste mohli chtít přidat na začátek svého crontabového záznamu něco jako následující (budete muset přidat do všech adresářů, které váš skript bude potřebovat):

PATH=~/bin:/usr/bin/:/bin

Také si všimněte, že cron bude ve výchozím nastavení používat /bin/sh, ne bash. Pokud potřebujete bash, přidejte jej také na začátek souboru crontab:

Shell=/bin/bash

Všimněte si, že obě tyto změny ovlivní všechny položky crontab. Pokud chcete pouze upravit tyto hodnoty pro vaše info.php program, můžete udělat něco takového:

*/2 * * * * /bin/bash -c ". ~/.bashrc; /path_to_my_php_script/info.php"

Za zmínku také stojí, že v systému nakonfigurovaném pro „mail“ (jinými slovy systém, který má nakonfigurovaný MTA [sendmail/postfix/atd.]), Je veškerý výstup z crontab programů odeslán automaticky e-mailem. Výchozí stolní systém Ubuntu nebude mít nakonfigurovanou místní poštu, ale pokud pracujete na serveru, stačí do terminálu napsat „mail“ a zobrazit všechny tyto cron maily. To platí také pro příkaz "at".

76
jamesodhunt

I když je velmi vzácný, někdy cron přestane správně fungovat, přestože služba běží. Zde je návod, jak ověřit, zda je crond spuštěn, a zastavit/spustit službu.

V systému Linux:

service crond status
service crond stop
service crond start

V Ubuntu a dalších systémech založených na Debianu:

service cron status
service cron stop
service cron start
52
user53817

Nesměrujte chybový výstup na/dev/null a grep/var/log/syslog pro výstup cron.

grep cron /var/log/syslog

Při ukládání souboru po úpravě můžete okamžitě zobrazit chyby /etc/crontab nebo soubory uvnitř /etc/cron.d/ s:

tail -f /var/log/syslog | grep --line-buffered cron

Pokud je úprava v pořádku, uvidíte pouze upozornění RELOAD, dojde k chybám jako

Jul 9 09:39:01 vm cron[1129]: Error: bad day-of-month; while reading /etc/cron.d/new 
33
rubiojr

Aktivního crona můžete vidět příkazem terminálu:

crontab -l

Zde jsou parametry v pořadí:

  1. min (0 - 59)

  2. hodina (0 - 23)

  3. den v měsíci (1 - 31)

  4. měsíc (1 - 12)

  5. den v týdnu (0 - 6) (neděle = 0)

  6. příkaz

Takže voláte skript každou první minutu každou hodinu. Pro účely testování byste měli testovat výstup častěji:

* * * * * <command> #Runs every minute

To bude volat každou minutu!

19
bioShark

Pro časovou část na každém řádku můžete použít tester cron k testování/ověření vaší definice času cronu.

11
Ashish Karpe

Věřím, že můžete také použít run-parts spustit cron úlohy mimo pásmo. Je to vlastně to, co cron sám používá ke spuštění periodických cronových úloh, takže zadáním příslušných argumentů je můžete kdykoli spustit.

Pokud chcete pouze spustit jeden soubor místo všech cronových úloh definovaných např. V /etc/cron.daily budete muset zadat argument regex spolu s platným regexem. run-parts --list --regex '^p.*d$' /etc

Mějte na paměti, že úlohy cron jsou obvykle pojmenovány bez přípony a označeny jako spustitelné, proto se ujistěte, že jsou vaše skripty podobné, i když použití regexu vám může umožnit spuštění skriptu s příponou.

2
dragon788

ah !!

dostal jsem odpověď sám, zkontroloval jsem a nenašel crond uvnitř výchozího instalačního adresáře, tj. /etc/init.d/

se nyní pokusí odpovědět.

poznámka - zkontroloval jsem cron.allow, cron.deny také. Zatím je vše v pořádku.

1
luckbychance