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


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-completo e sto facendo funzionare 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.


146
2017-11-27 10:25


origine


Ogni giorno alle 6:25? Quelli sono script da /etc/cron.daily/. Ho solo un tentativo di inviare mail: popularity-contest. Guarda i tuoi script e vedi quale script sta cercando di inviare la posta? Quello dovrebbe restringerlo. Quindi 'chmod 0644 /etc/cron.daily/script-name' per impedire l'esecuzione.


risposte:


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 non lo è.

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

sudo apt-get install postfix

O 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).


139
2018-01-01 08:56



Postfix è una buona cosa da installare? Quale MTA è più facile da usare? - endolith
postfix è il server di posta più usato per Linux, attenersi ad esso - Rápli András
Vale la pena ricordare che per l'utilizzo con cron (ovvero se non si desidera inviare effettivamente le email all'esterno) durante la procedura di installazione, è necessario rispondere per configurare solo per uso locale. - steffen


Questo accade perché i tuoi lavori cron generano output e quindi il demone cron tenta di inviarti tramite posta elettronica quell'output (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 ad ogni lavoro:

* * * * * yourCommand >/dev/null 2>&1

63
2018-04-26 10:27



Il problema con questo approccio è che non spiega l'elevato utilizzo della CPU. Cron sta chiaramente cercando di essere comunicativo e questo essenzialmente sta semplicemente ignorando l'output. Sarei più propenso a gestire l'output piuttosto che scartarlo, nel caso ci fossero utili informazioni di debug. - Oli♦
Oli, anche se questa è una vecchia domanda, sto vivendo lo stesso esatto problema, ma è su Raspberry PI. Vedo un mucchio di No MTA installed, discarding output messaggio nel registro e il mio programma alla fine smette di funzionare da solo. Credo che sia a causa del picco della CPU. Sembra che tutta la risposta pubblicata per questa domanda sembri ignorarla. - ThN
Per mantenere l'output, inserisci il comando in uno script e inserisci pipe stdout e stderr su logger. Per esempio, yourCommand >/dev/null 2>&1 | logger -t mycmd. Ciò consentirà di mantenere l'output in syslog e di interrompere i reclami MTA. - CivMeierFan


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 corso:

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 l'ho sostituito

<user>

con "root".

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


41
2017-07-10 14:28



Grazie per il commento in più su come controllare la casella di posta per vedere gli errori dal lavoro! - Stuart Allen


In crontab aggiungi questo come prima riga:

MAILTO=""

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


20
2017-08-27 13:06



Non inserire commenti (#) dopo MAILTO="" o non funzionerà - SBF


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


19
2018-04-17 19:37



Ho fatto questo, ma nessuna registrazione è stata aggiunta al file. - pir
Sei sicuro che il cron job sia in esecuzione? - Andrew MacNaughton
Sì, il registro di sistema mostra che è stato avviato. - pir
È necessario '2> & 1' alla fine della riga per acquisire l'output su stderr nel file. - MattSmith


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

(uso sudo se il problema è con crontab di root) e aggiungi >> / Some / log / file di 2>&1 dopo ogni comando, in questo modo:

0 3 * * * cmd  >> / Some / log / file di 2> & 1

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

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

o raggruppali in questo modo:

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

Se si desidera ignorare lo stdout e acquisire solo stderr, uso > /dev/null 2>> / Some / log / file dianziché. 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 esaminare il file di registro dopo l'esecuzione del lavoro.


13
2017-07-29 02:40





Un effetto collaterale di aggiunta /dev/null 2>&1 al comando cron job, è che scarterà entrambi STDERR e STDOUT (Errore standard e uscita). Funziona bene se non vuoi ricevere email da cron. Ma se vuoi che i tuoi errori ti vengano inviati via email, usa >/dev/null anziché. Leggi questo post sul 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


10
2017-12-30 17:27



Per quanto ho capito '> / dev / null' li manderò solo, e '> / dev / null 2> & 1' eseguirà la correzione di tutti gli errori? Cosa dovrei usare per ottenere errori nel registro ma nessuna mail? Ora non ricevo mail (come voglio) ma il brutto 'no MTA ...' - Pit
Afaik, non c'è modo di registrare l'output diverso da inviarlo alle e-mail. La cosa più vicina che si può fare è impostare postfix per il recapito della posta locale (se si esegue "sudo apt-get install postfix" viene richiesto se si desidera impostare la consegna locale. Anche se inizialmente sembrava un dolore, funziona davvero molto meglio Ogni volta che accedo tramite ssh, vedo una nuova e-mail sulla macchina se un lavoro precedente ha fallito, trovo più comodo che dover controllare il log. - paneer_tikka
Penso che questo potrebbe essere ok per me. Grazie - Pit


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

Conduci l'output del tuo comando cron attraverso logger così finiscono nel syslog.

È leggermente più semplice dell'installazione di postfix e mette questo output in syslog insieme agli altri registri. Questo comando catturerà lo stdout e lo stderr in modo da non vedere il file No MTA installed messaggio 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

8
2017-10-22 22:44



Le tubature funzionano nei cron job? - CivMeierFan