“(CRON) info (Nenhum MTA instalado, descartando a saída)” erro no syslog

136

Eu tenho uma nova instalação do Ubuntu 12.04.1 LTS e um número de servidores.

Eu não adicionei nenhuma tarefa do cron ou editei meu crontab nesses servidores, no entanto, aproximadamente na mesma hora para cada máquina, recebo um pico de CPU de 75% e as seguintes informações no meu syslog no momento do pico:

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

Eu tenho um mono-completo instalado e estou executando um servidor web de pilha de serviços.

Qual é a melhor maneira de impedir que isso aconteça? Eu gostaria de poder remover o pico da CPU.

    
por sungiant 27.11.2012 / 11:25
fonte

9 respostas

130

O Linux usa o correio para enviar notificações ao usuário. A maioria das distribuições Linux tem um serviço de correio (incluindo um MTA) instalado. O Ubuntu não faz isso.

Você pode instalar um serviço de correio, por exemplo, um postfix para resolver este problema.

sudo apt-get install postfix

Ou você pode ignorá-lo. Eu não acho que a incapacidade do cron enviar mensagens tenha algo a ver com o pico da CPU (que está ligado à tarefa subjacente que o cron está executando). Pode ser mais seguro instalar um MTA e ler as mensagens ( mutt é um bom leitor de correio do sistema).

    
por martin 01.01.2013 / 09:56
fonte
59

Isso acontece porque suas tarefas agendadas estão produzindo a saída e, em seguida, o daemon do cron tenta enviar por e-mail essa saída para você (ou seja, raiz). Se você não precisa dessa saída, a maneira mais fácil de resolver isso é descartá-la no crontab:

sudo crontab -e

e adicione >/dev/null 2>&1 a todos os trabalhos:

* * * * * yourCommand >/dev/null 2>&1
    
por rob 26.04.2013 / 12:27
fonte
39

No meu caso, a mensagem estava insinuando um problema de permissões com o script bash, mas não consegui vê-lo até instalar um MTA.

Como sugerido, eu corri:

sudo aptitude install postfix

Eu escolhi "Local" durante a configuração e depois de executar o cron job novamente:

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

No meu caso eu substituí

<user>

com "root".

Eu consegui ver a saída de erro relacionada às permissões.

    
por Martin Carstens 10.07.2015 / 16:28
fonte
20

Em crontab, adicione isso como primeira linha:

MAILTO=""

Isso impedirá que o cron tente enviar um e-mail.

    
por 88weighed 27.08.2015 / 15:06
fonte
18

Se você não quiser instalar um MTA (que eu atualmente não tenho necessidade), você pode enviar os resultados do cron job para um arquivo de log.

sudo crontab -e

então, com o seu cron job, ficaria assim.

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

você pode simplesmente seguir o log e ver o que aconteceu

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

Isto é o que tenho feito em qualquer servidor que vejo essa mensagem no syslog

    
por Andrew MacNaughton 17.04.2016 / 21:37
fonte
13

Como afirmado em uma resposta anterior, isso acontece porque seus cron jobs estão produzindo e, em seguida, o daemon do cron tenta enviar por e-mail essa saída para você. Se você não quiser (ou não puder) instalar um MTA, mas você quer ver a saída você pode redirecionar a saída da tarefa cron para um arquivo de log. Edite seu arquivo crontab com

crontab -e

(use sudo se o problema for com o crontab do root) e adicione >> /some/log/file 2>&1 após cada comando, assim:

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

Se houver vários comandos em uma linha, separados por ; , && ou || , você deve fazer o acima para cada comando, assim:

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

ou agrupe-os assim:

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

Se você quiser ignorar stdout e capturar somente stderr, use > /dev/null 2>> /some/log/file em vez disso. Coloque o arquivo de log onde quiser - o seu diretório pessoal, /var/log , ou mesmo /tmp se tiver certeza de que não precisará mantê-lo.

Em seguida, observe o arquivo de log após a execução do trabalho.

    
por G-Man 29.07.2016 / 04:40
fonte
10

Um dos efeitos colaterais da adição de /dev/null 2>&1 ao comando cron job é que ele descartará os STDERR e STDOUT (Erro padrão e também Saída). Isso funciona bem se você não quiser nenhum email do cron. Mas se você quiser que seus erros sejam enviados para você, use >/dev/null . Leia esta postagem do blog para mais explicações .

Você ainda precisará instalar um MTA (agente de transferência de mensagens) para enviar os e-mails de erro. O Postfix é simples o suficiente para instalar com: sudo apt-get install postfix

    
por paneer_tikka 30.12.2013 / 18:27
fonte
8

Essa é uma pergunta antiga, mas há uma resposta adicional útil em algumas circunstâncias.

Pipe a saída do seu comando cron através de logger para que eles acabem no syslog.

É um pouco mais fácil do que instalar o postfix, e coloca essa saída no syslog ao lado de seus outros logs. Este comando irá capturar stdout e stderr para que você não veja a mensagem No MTA installed e você verá toda a sua saída no syslog.

Exemplo de entrada cron:

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

Você pode ver os registros com sua tag mycmd usando:

grep 'mycmd' /var/log/syslog
    
por Michael Hunter 23.10.2017 / 00:44
fonte
1

Você pode definir a variável MAILTO=”” no início do seu arquivo crontab . Isso também desativará o alerta por email. Edite / abra seus trabalhos do cron:

$ crontab -e

Na parte superior do arquivo, digite:

MAILTO=""

link

    
por Damien Cuvillier 19.02.2018 / 06:18
fonte

Tags