Verifica se crontab funziona


82

Voglio verificare se un determinato crontab funziona correttamente. Ho aggiunto un lavoro come questo:

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

So che reindirizzo al dispositivo null, ma non sono sicuro che il comando sopra sia buono.

* Modifica 1: Nel mio / var / log / syslog ogni due minuti ho il seguente errore:

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

* Modifica 2: nessun errore nei registri con questo nuovo lavoro:

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

sfortunatamente tutto sopra provato ma non funziona per me. come dici tu la versione di prova / bin / sh -c "(export PATH = / bin; /tmp/trial.sh </ dev / null)" mostra il messaggio sotto, non sono sicuro di cosa sia / bin / sh: PATH = / bin : non è un identificatore

Risposte:


73

La sintassi per la voce crontab sembra corretta. Infatti, se modifichi il tuo crontab usando " crontab -e" (come dovresti), otterrai un errore se specifichi comunque una voce crontab sintatticamente non valida.

  1. Innanzitutto, viene /path_to_my_php_script/info.phpeseguito correttamente dalla riga di comando?

  2. In tal caso, funziona correttamente anche in questo modo ?:

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null)"
    
  3. Se funziona, funziona così?

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

Il passaggio (3) è simile a come cron eseguirà il tuo programma (come documentato in "man 5 cron".

Il problema più probabile che stai riscontrando è che il cron PATH sta usando per eseguire il tuo programma è troppo restrittivo. Pertanto, potresti voler aggiungere qualcosa di simile alla parte superiore della voce crontab (dovrai aggiungere in qualsiasi directory sarà necessario il tuo script):

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

Nota anche che cron utilizzerà per impostazione predefinita /bin/sh, non bash. Se hai bisogno di bash, aggiungi anche questo all'inizio del tuo file crontab:

SHELL=/bin/bash

Si noti che entrambe queste modifiche influenzeranno tutte le voci crontab. Se vuoi solo modificare questi valori per il tuo info.phpprogramma, potresti fare qualcosa del genere:

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

Vale anche la pena ricordare che su un sistema configurato per "mail" (in altre parole un sistema che ha un MTA configurato [sendmail / postfix / etc]), tutto l'output dei programmi crontab ti viene inviato automaticamente via e-mail. Un sistema desktop Ubuntu predefinito non avrà la posta locale configurata, ma se stai lavorando su un server puoi semplicemente digitare "mail" in un terminale per vedere tutte quelle cron mail. Questo vale anche per il atcomando " ".


2
Mi viene negata l'autorizzazione per il 2 ° passaggio. Cosa dovrei fare?
Akikara,

@akikara chmod + x ./cron.sh - ovviamente sostituisci ./cron.sh con qualunque sia la posizione del tuo file che stai cercando di eseguire
Tisch

46

Anche se molto raro, a volte cron smette di funzionare correttamente anche se il servizio è in esecuzione. Ecco come verificare che crond sia in esecuzione e arrestare / avviare il servizio.

Su Linux:

service crond status
service crond stop
service crond start

Su Ubuntu e altri sistemi basati su Debian:

service cron status
service cron stop
service cron start

13
Solo una nota ... per Ubuntu non lo cronècrond
Amit Kohli,

32

Non reindirizzare l'output dell'errore su / dev / null e grep / var / log / syslog per l'output cron.

grep cron /var/log/syslog

È possibile mostrare immediatamente gli errori durante il salvataggio di un file dopo la modifica /etc/crontabo i file all'interno /etc/cron.d/con:

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

Se la modifica è ok, vedrai solo l' RELOADavviso, si verificheranno errori come

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

19

Puoi vedere il tuo cron attivo con il comando terminal:

crontab -l

Ecco i parametri in ordine:

  1. min (0-59)

  2. ora (0-23)

  3. giorno del mese (1-31)

  4. mese (1-12)

  5. giorno della settimana (0 - 6) (domenica = 0)

  6. comando

Quindi, stai chiamando la tua sceneggiatura ogni primo minuto di ogni ora. È necessario testare l'output a intervalli più frequenti a scopo di test:

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

Questo lo chiamerà ogni minuto!


* / 2 * * * * Ho cambiato ogni due minuti ora
croppio.com


2

Credo che tu possa anche usare run-partsper eseguire cron job fuori banda. In realtà è ciò che cron si utilizza per eseguire periodicamente i processi cron, quindi fornendo gli argomenti appropriati è possibile eseguirli in qualsiasi momento.

Se vuoi solo eseguire un file invece di tutti i lavori cron definiti in es. /etc/cron.dailyDovrai fornire l'argomento regex insieme a un regex valido.run-parts --list --regex '^p.*d$' /etc

Tieni presente che i lavori cron in genere vengono denominati senza estensione e contrassegnati come eseguibili, quindi assicurati che i tuoi script siano simili, sebbene l'utilizzo di un regex possa consentire di attivare uno script con un'estensione.


1

ah !!

ho ottenuto la risposta, ho controllato e non ho trovato crondnella directory di installazione predefinita, ad es/etc/init.d/

ora proverò a rispondere.

Nota - ho controllato il cron.allow, cron.denytroppo. Finora tutto bene.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.