2011-01-27 16 views
133

Voglio sapere come posso vedere esattamente cosa stanno facendo i lavori cron su ogni esecuzione. Dove si trovano i file di registro? O posso inviare l'output alla mia email? Ho impostato l'indirizzo email per inviare il log quando il cron job viene eseguito ma non ho ancora ricevuto nulla.Cron Job Log - Come accedere?

risposta

216
* * * * * myjob.sh >> /var/log/myjob.log 2>&1 

registrerà tutto l'output dal lavoro cron per /var/log/myjob.log

Si potrebbe utilizzare mail per inviare messaggi di posta elettronica. La maggior parte dei sistemi invierà l'output del lavoro non gestito cron tramite email a root o all'utente corrispondente.

+51

Descrizione di cosa significa '2> & 1': http://stackoverflow.com/questions/818255/in-the-bash-shell-what-is-21 – Yamaneko

+4

quale potrebbe essere il problema se questo file di registro non viene mai creato ? – clamp

+9

FWIW, Se si desidera sia 'stderr' che' stdout' nel log, il '2> & 1' deve venire dopo l'indirezione indiretta:' myjob.sh >> /var/log/myjob.log 2> & 1' –

8

Ecco il mio codice:

* * * * * your_script_fullpath >> your_log_path 2>&1 
+0

" >> "significa aggiungere dati al fileright? che cosa significa "2> & 1", output completo con errore, giusto? – Nullpointer

+1

Le domande di reindirizzamento di base sono meglio controllate nel manuale. C'è anche una metrica di domande duplicate su questi operatori qui su Stack Overflow. Ma sì, grosso modo; '>>' aggiunge e '2> & 1' dice di inviare errore standard nello stesso posto dell'output standard. – tripleee

7

Ci sono almeno tre diversi tipi di registrazione:

  1. La registrazione PRIMA del programma viene eseguita, che registra SE solo il cronjob TRIED per eseguire il comando. Quella si trova in /var/log/syslog, come già menzionato da @Matthew Lock.

  2. La registrazione degli errori DOPO che il programma ha tentato di eseguire, che può essere inviato a un'e-mail o in un file, come indicato da @Spliffster. Io preferisco registrare in un file, perché con e-mail ALLORA hai una NUOVA fonte di problemi e controlla che l'invio e la ricezione delle email funzionino perfettamente con . A volte lo è, a volte non lo è. Per esempio, in una semplice macchina CDE in cui non si è interessati a configurazione di uno smtp, a volte si preferisce registrazione in un file:

    * * * * COMMAND_ABSOLUTE_PATH > /ABSOLUTE_PATH_TO_LOG 2>&1 
    
    • Vorrei anche prendere in considerazione il controllo dei permessi di/ABSOLUTE_PATH_TO_LOG ed esegui il comando dalle autorizzazioni dell'utente. Solo per la verifica, mentre verifichi se potrebbe essere una potenziale fonte di problemi.
  3. La registrazione del programma stesso, con la sua gestione degli errori e la registrazione per scopi di monitoraggio.

Esistono alcune fonti comuni di problemi con cronjob: * Il PERCORSO ASSOLUTO del file binario da eseguire. Quando lo si esegue dalla shell , potrebbe funzionare, ma il processo cron sembra utilizzare un altro ambiente e, quindi, non trova sempre i file binari se non si utilizza il percorso assoluto per . * Le LIBRERIE utilizzate da un binario. È più o meno lo stesso punto precedente, ma assicurati che, se si inserisce semplicemente il NOME del comando, si riferisca esattamente al binario che usa la stessa libreria, o meglio, controlla se il binario ti sta riferendo con il percorso assoluto è lo stesso che si riferisce quando si utilizza direttamente la console.I binari possono essere trovati utilizzando il comando locate, per esempio:

$locate python 

essere sicuri che il binario si farà riferimento, è lo stesso binario si sta chiamando nella shell, o semplicemente testare di nuovo nella shell utilizzando il percorso assoluto che intendi inserire nel cronjob.

  • Un'altra causa comune di problemi è la sintassi nel cronjob. Ricordate che ci sono caratteri speciali che è possibile utilizzare per liste (virgole), per definire gamme (trattini -), per definire incremento di gamme (slash), ecc Date un'occhiata: http://www.softpanorama.org/Utilities/cron.shtml
1

Incase sei eseguendo qualche comando con sudo, non lo permetterà. Sudo ha bisogno di un tty.

+2

Ciò dipende anche dalla configurazione 'sudo'. Le cose che devono essere eseguite senza un modo per fornire una password dovrebbero essere configurate con 'NOPASSWD:' nella configurazione 'sudoers'. – tripleee

1

Su Ubuntu è possibile abilitare un file cron.log per contenere solo le voci CRON.

Rimuovere il commento dalla linea che menziona cron in /etc/rsyslog.d/50-default.conf di file:

# Default rules for rsyslog. 
# 

#      For more information see rsyslog.conf(5) and /etc/rsyslog.conf 

# 
# First some standard log files. Log by facility. 
# 
auth,authpriv.*     /var/log/auth.log 
*.*;auth,authpriv.none   -/var/log/syslog 
#cron.*       /var/log/cron.log 

Salvare e chiudere il file e quindi riavviare il servizio rsyslog:

sudo systemctl restart rsyslog 

Ora è possibile visualizzare le voci del registro di cron nella propria file:

sudo tail -f /var/log/cron.log 

Uscite campione:

Jul 18 07:05:01 machine-host-name CRON[13638]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1) 

Tuttavia, non sarà possibile visualizzare ulteriori informazioni su ciò che gli script sono stati effettivamente eseguito all'interno /etc/cron.daily o /etc/cron.hourly, a meno che questi script uscita diretta alla cron.log (o forse per qualche altro file di log).

Se si desidera verificare se un crontab è in esecuzione e non devono cercarlo nella cron.log o syslog, creare un crontab che reindirizza l'output in un file di log della vostra scelta - qualcosa come:

# For more information see the manual pages of crontab(5) and cron(8) 
# 
# m h dom mon dow command 
30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log 2>&1 

Passi da: https://www.cyberciti.biz/faq/howto-create-cron-log-file-to-log-crontab-logs-in-ubuntu-linux/

+0

Ubuntu 16.04 non ha mostrato alcun registro cron e questa informazione ha fatto il trucco. – pojda

0

Tutto ciò non funziona per me. Quindi, devo aggiungere "MAILTO = [mia e-mail]" nella parte superiore del file di crontab su /etc/cron.d/ e ho ottenuto la risposta perché il mio comando cron ha avuto degli errori.

0

cron invia già l'output standard e l'errore standard di ogni lavoro eseguito per posta al proprietario del processo cron.

È possibile utilizzare MAILTO=recipient nel file crontab per inviare le e-mail a un altro account.

Perché funzioni, è necessario che la posta funzioni correttamente. Il recapito a una casella di posta locale non è di solito un problema (infatti, è probabile che lo ls -l "$MAIL" rivelerà che ne hai già ricevuto alcuni) ma scaricarlo da Internet e da Internet richiede il MTA (Postfix, Sendmail, cos'hai) per essere correttamente configurato per connettersi al mondo.