Errore "(CRON) info (Nessun MTA installato, uscita scartata)" nel syslog


198

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

Non ho aggiunto alcun cron job o modificato il mio crontab su quei server, tuttavia, 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 mono-complete e sto eseguendo un server web di stack di servizi.

Qual è il modo migliore per impedire che ciò accada? Vorrei poter rimuovere il picco della CPU.


Ogni giorno alle 6:25? Quelli sono script da /etc/cron.daily/. Ne ho solo uno che cerca di inviare posta: popolarità-concorso. Guarda i tuoi script e vedi quale script sta cercando di inviare posta? Questo dovrebbe restringerlo. Quindi 'chmod 0644 /etc/cron.daily/script-name' per impedire l'esecuzione.

Risposte:


173

Linux utilizza la posta per inviare notifiche all'utente. La maggior parte delle distribuzioni Linux ha un servizio di posta (incluso un MTA) installato. Ubuntu non lo fa.

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

sudo apt-get install postfix

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


5
Postfix è una buona cosa da installare? Quale MTA è più facile da usare?
endolito il

2
postfix è il server di posta più utilizzato per Linux, attenersi ad esso
Rápli András,

5
Vale la pena sottolineare che per l'uso con cron (ovvero se non si desidera effettivamente inviare e-mail verso l'esterno) durante la procedura di installazione, è necessario rispondere per configurare solo per uso locale.
Steffen,

l'unico modo che conosco per controllare la posta è mailfornito da mailutils(debian), se esiste un modo migliore integrato per postfix?
ThorSummoner,

79

Ciò accade perché i tuoi lavori cron producono output e quindi il demone cron tenta di inviarti l'output (cioè root). Se non hai bisogno di quell'output, il modo più semplice per risolverlo è scartarlo nel crontab:

sudo crontab -e

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

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

10
Il problema con questo approccio è che non spiega l'alto 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 che a scartarlo, nel caso in cui ci siano utili informazioni di debug.
Oli

1
Oli, anche se questa è una vecchia domanda, sto riscontrando lo stesso problema esatto, ma è su Raspberry PI. Vedo un sacco di No MTA installed, discarding outputmessaggi nel registro e il mio programma alla fine smette di funzionare da solo. Credo che sia a causa del picco della CPU. Sembra che tutte le risposte pubblicate per questa domanda sembrano ignorarlo.
Giovedì

4
Per mantenere l'output, inserire il comando in uno script e pipe stdout e stderr su logger. Ad esempio yourCommand >/dev/null 2>&1 | logger -t mycmd,. Questo metterà l'output in syslog per la conservazione sicura e fermerà i reclami MTA.
CivMeierFan,

56

Nel mio caso, il messaggio suggeriva un problema di autorizzazioni con lo script bash, ma non riuscivo a 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 processo cron:

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

Nel mio caso ho sostituito

<user>

con "root".

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


3
Grazie per il commento extra su come controllare la casella di posta per vedere gli errori dal lavoro!
Stuart Allen,

32

Come affermato in una risposta precedente, ciò accade perché i tuoi lavori cron producono output e quindi il demone cron tenta di inviarti l'output tramite e-mail. Se non si desidera (o non è possibile) installare un MTA, ma si desidera vedere l'output, è possibile reindirizzare l'output del processo cron su un file di registro. Modifica il tuo file crontab con

crontab -e

(utilizzare sudose il problema riguarda il crontab di root) e aggiungere dopo ogni comando, in questo modo:>> /some/log/file 2>&1

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

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

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

o raggruppali in questo modo:

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

Se vuoi ignorare stdout e catturare solo stderr, usa invece. Metti il ​​file di registro dove vuoi: la tua home directory o anche se sei sicuro di non doverlo conservare.> /dev/null 2>> /some/log/file/var/log/tmp

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


29

In crontab aggiungi questo come prima riga:

MAILTO=""

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


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

23

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

sudo crontab -e

quindi con il tuo cron job sarebbe simile a questo.

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

quindi puoi semplicemente accodare il registro 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


Ho fatto questo, ma nessuna registrazione viene 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

1
È necessario "2> & 1" alla fine della riga per acquisire l'output di stderr nel file.
MattSmith il

15

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

Installa l'output del tuo comando cron in loggermodo che finiscano nel syslog.

È leggermente più semplice dell'installazione di postfix e inserisce questo output in syslog insieme agli altri log. Questo comando catturerà stdout E stderr in modo che non vedrai il No MTA installedmessaggio e vedrai tutto il tuo output nel syslog.

Esempio di voce cron:

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

Puoi visualizzare i log con il tuo tag mycmdusando:

grep 'mycmd' /var/log/syslog

Le pipe funzionano nei lavori cron?
CivMeierFan,

10

Un effetto collaterale di aggiungere /dev/null 2>&1al comando cron, è che scarterà sia STDERRe STDOUT(errore standard così come uscita). Funziona bene se non vuoi email da cron. Ma se vuoi che i tuoi errori ti vengano inviati via email, usa >/dev/nullinvece. Leggi questo post sul blog per ulteriori spiegazioni .

Tuttavia, dovrai comunque installare un MTA (agente di trasferimento della posta) per inviare le e-mail di errore. Postfix è abbastanza semplice da installare con:sudo apt-get install postfix


Per quanto ho capito '> / dev / null' li invierà solo e '> / dev / null 2> & 1' ignorerà tutti gli errori? Cosa dovrei usare per ottenere errori nel registro ma nessuna posta? Ora non ricevo mail (come lo voglio) ma il brutto "no MTA ..."
Pit

2
dopo, non c'è modo di registrare l'output se non quello di inviarlo alle e-mail. La cosa più vicina che puoi fare è impostare postfix per il recapito della posta locale (se esegui "sudo apt-get install postfix" ti chiede se vuoi impostare il recapito locale. Mentre inizialmente sembrava un problema, in realtà funziona molto meglio. Ogni volta che accedo tramite ssh, vedo una nuova e-mail sulla macchina se un lavoro precedente non è riuscito. Lo trovo più conveniente che dover controllare il registro
paneer_tikka

2
  1. Inizialmente, installa postfix, questo può risolvere il problema

    sudo apt-get install postfix
    
  2. Se Ubuntu, è possibile modificare il crontabfile

    sudo vim /etc/crontab
    
  3. Attenzione , modifica il file principale , nessun codice nella prima riga , e inserisci

    MAILTO=root // current system user
    
  4. Quando cronesegue qualsiasi attività , riceverai un'e-mail

    mail
    

1
La tua risposta sembra essere buona, ma non riuscivo a dare un senso a tutte le istruzioni. Forse puoi migliorarlo.
zx485,


1

Ho avuto questo problema usando gli strumenti Kitematic Docker .
Vai al contenitore Magento e fai clic su exe.

Quindi corri

apt-get update

Questo è se stai cercando di far funzionare magento su kitematic. Il registro mostrerà questo errore sulla macchina virtuale:

bisogno di aggiornamento.

Scusami se ti sei perso, ma funziona così. Ti perdi, ma leggilo e i pezzi si uniranno. Essere pazientare.

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.