"(CRON) info (Nessun MTA installato, scartando output)" errore nel syslog

143

Ho una nuova installazione di Ubuntu 12.04.1 LTS un numero di server.

Non ho aggiunto nessun cron job o modificato il mio crontab su quei server, tuttavia, all'incirca allo stesso tempo per ogni macchina, ottengo un picco della CPU del 75% e le seguenti informazioni nel mio syslog al momento dello spike:

CRON[8380]: (CRON) info (No MTA installed, discarding output)

Ho installato il mono-completamento e sto eseguendo un server web dello stack di servizi.

Qual è il modo migliore per me per evitare che ciò accada? Mi piacerebbe essere in grado di rimuovere il picco della CPU.

    
posta sungiant 27.11.2012 - 11:25
fonte

9 risposte

137

Linux usa la posta per l'invio di notifiche all'utente. La maggior parte delle distribuzioni Linux ha un servizio di posta (incluso un MTA) installato. Tuttavia, Ubuntu.

È possibile installare un servizio di posta, ad esempio postfix, per risolvere questo problema.

sudo apt-get install postfix

Oppure puoi ignorarlo. Non penso che l'impossibilità di cron di inviare messaggi abbia a che fare con il picco della CPU (che è collegato al lavoro sottostante che cron è in esecuzione). Potrebbe essere più sicuro installare un MTA e quindi leggere i messaggi ( mutt è un buon lettore di posta di sistema).

    
risposta data martin 01.01.2013 - 09:56
fonte
62

Questo accade perché i tuoi lavori cron generano output e quindi il demone cron prova a inviarlo via email (cioè root). Se non hai bisogno di quell'output, il modo più semplice per risolverlo è scartarlo sul crontab:

sudo crontab -e

e aggiungi >/dev/null 2>&1 a ogni lavoro:

* * * * * yourCommand >/dev/null 2>&1
    
risposta data rob 26.04.2013 - 12:27
fonte
40

Nel mio caso, il messaggio stava suggerendo un problema di permessi con lo script bash, ma non ho potuto vederlo fino a quando non ho installato un MTA.

Come suggerito, ho eseguito:

sudo aptitude install postfix

Ho scelto "Local" durante l'installazione e dopo aver eseguito nuovamente il cron job:

sudo tail -f /var/mail/<user>

Nel mio caso ho sostituito

<user>

con "root".

Ero quindi in grado di vedere l'output dell'errore relativo alle autorizzazioni.

    
risposta data Martin Carstens 10.07.2015 - 16:28
fonte
20

In crontab aggiungi questo come prima riga:

MAILTO=""

Ciò impedirà a cron di provare a inviare un'e-mail.

    
risposta data 88weighed 27.08.2015 - 15:06
fonte
19

Se non si desidera installare un MTA (di cui non ho attualmente bisogno), è possibile reindirizzare i risultati del processo cron in un file di registro.

sudo crontab -e

quindi con il tuo cron job assomiglierebbe a questo.

0 3 * * * /cmd/to/run >> /var/log/somelogfile.log

quindi puoi solo inserire il log e vedere cosa è successo

sudo tail -f -n 50 /var/log/somelogfile.log

Questo è quello che ho fatto su qualsiasi server che vedo quel messaggio in syslog

    
risposta data Andrew MacNaughton 17.04.2016 - 21:37
fonte
13

Come affermato in una risposta precedente, questo accade perché i tuoi lavori cron producono output, e quindi il demone cron prova a inviarlo via email. Se non vuoi (o non puoi) installare un MTA, ma vuoi vedere l'output, è possibile reindirizzare l'output del processo cron in un file di registro. Modifica il tuo file crontab con

crontab -e

(usa sudo se il problema riguarda il crontab di root) e aggiungi >> /some/log/file 2>&1 dopo ogni comando, in questo modo:

0 3 * * * cmd  >> /some/log/file 2>&1

Se ci sono più comandi su una linea, separato da ; , && o || , dovresti fare quanto sopra per ogni comando, in questo modo:

0 3 * * * cmd1  >> /some/log/file 2>&1;  cmd2  >> /some/log/file 2>&1

o raggruppali in questo modo:

0 3 * * * (cmd1;  cmd2)  >> /some/log/file 2>&1

Se si desidera ignorare lo stdout e acquisire solo lo stderr, usa > /dev/null 2>> /some/log/file invece. Metti il ​​file di log dove vuoi - la tua home directory, /var/log o anche /tmp se sei sicuro di non aver bisogno di tenerlo.

Quindi guarda il file di registro dopo l'esecuzione del lavoro.

    
risposta data G-Man 29.07.2016 - 04:40
fonte
10

Un effetto collaterale dell'aggiunta di /dev/null 2>&1 al comando cron job, è che scarterà sia STDERR che STDOUT (errore standard e output). Funziona bene se non vuoi ricevere email da cron. Ma se vuoi che ti vengano inviati i tuoi errori, usa >/dev/null . Leggi questo post del blog per ulteriori spiegazioni .

Dovrai comunque installare un MTA (agente di trasferimento messaggi) per inviare i messaggi di errore. Postfix è abbastanza semplice da installare con: sudo apt-get install postfix

    
risposta data paneer_tikka 30.12.2013 - 18:27
fonte
8

Questa è una vecchia domanda ma c'è una risposta aggiuntiva che è utile in alcune circostanze.

Esegui il pipe dell'output del tuo comando cron attraverso logger in modo che finiscano nel syslog.

È leggermente più semplice dell'installazione di postfix e mette questo output in syslog insieme agli altri registri. Questo comando acquisirà stdout E stderr in modo da non visualizzare il messaggio No MTA installed e vedrai tutti i tuoi output nel syslog.

Esempio di cron entry:

0 3 * * * (cmd1;  cmd2) 2>&1 | logger -t mycmd

Puoi visualizzare i log con il tuo tag mycmd utilizzando:

grep 'mycmd' /var/log/syslog
    
risposta data Michael Hunter 23.10.2017 - 00:44
fonte
1

Puoi impostare la variabile MAILTO=”” all'inizio del tuo file crontab . Questo disabiliterà anche l'avviso via email. Modifica / Apri i tuoi lavori cron:

$ crontab -e

Nella parte superiore del file, inserisci:

MAILTO=""

link

    
risposta data Damien Cuvillier 19.02.2018 - 06:18
fonte

Leggi altre domande sui tag