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.