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


Eu tenho uma nova instalação do Ubuntu 12.04.1 LTS 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, eu 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 o mono-completo instalado e estou executando um servidor web de pilha de serviço.

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


147
2017-11-27 10:25


origem


Todos os dias às 6:25? Esses são scripts de /etc/cron.daily/. Eu tenho apenas um tentando enviar e-mail: popularity-contest. Veja seus scripts e veja qual script está tentando enviar mensagens? Isso deve reduzi-lo. Então 'chmod 0644 /etc/cron.daily/script-name' para evitar a execução.


Respostas:


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, postfix, por exemplo, 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).


139
2018-01-01 08:56



O postfix é uma coisa boa para instalar? Qual MTA é mais fácil de usar? - endolith
O postfix é o servidor de e-mail mais usado para Linux, cumpri-lo - Rápli András
Vale ressaltar que, para uso com o cron (ou seja, se você não quer realmente enviar e-mails para fora) durante o procedimento de instalação, você deve responder para configurar apenas para uso local. - steffen


Isso acontece porque suas tarefas cron estão produzindo 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 para todos os trabalhos:

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

63
2018-04-26 10:27



O problema com essa abordagem é que isso não explica o alto uso da CPU. Cron está claramente tentando ser comunicativo e isso é essencialmente apenas ignorar a saída. Eu estaria mais inclinado a lidar com a saída do que descartá-la, apenas no caso de haver informações de depuração úteis. - Oli♦
Oli, embora esta seja uma pergunta antiga, estou tendo o mesmo problema exato, mas é no PI de framboesa. Vejo monte de No MTA installed, discarding output mensagem no log e meu programa eventualmente pára de rodar sozinho. Eu acredito que é por causa do pico da CPU. Parece que todas as respostas postadas para essa pergunta parecem ignorar isso. - ThN
Para manter a saída, coloque o comando em um script e canalize stdout e stderr para logger. Por exemplo, yourCommand >/dev/null 2>&1 | logger -t mycmd. Isso colocará a saída no syslog para uma manutenção segura e interromperá as reclamações do MTA. - CivMeierFan


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".

Então, consegui ver a saída de erro relacionada às permissões.


42
2017-07-10 14:28



Obrigado pelo comentário extra sobre como verificar a caixa de correio para ver erros do trabalho! - Stuart Allen


Em crontab, adicione isto como primeira linha:

MAILTO=""

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


20
2017-08-27 13:06



Não coloque nenhum comentário (#) depois de MAILTO="" ou não vai funcionar - SBF


Se você não deseja instalar um MTA (que atualmente não tenho necessidade), é possível canalizar os resultados da tarefa cron 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

então 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


19
2018-04-17 19:37



Eu fiz isso, mas nenhum log é adicionado ao arquivo. - pir
Tem certeza de que o cron job está sendo executado? - Andrew MacNaughton
Sim, o log do sistema mostra que está sendo iniciado. - pir
Você precisa '2> & 1' no final da linha para capturar a saída para stderr no arquivo. - MattSmith


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

(usar sudo se o problema for com o crontab da raiz) e adicione >> / algum / log / arquivo 2>&1 depois de cada comando, assim:

0 3 * * * cmd  >> / algum / log / arquivo 2> & 1

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

0 3 * * * cmd1  >> / algum / log / arquivo 2> & 1; cmd2  >> / algum / log / arquivo 2> & 1

ou agrupá-los, assim:

0 3 * * * (cmd1; cmd2)  >> / algum / log / arquivo 2> & 1

Se você quiser ignorar stdout e capturar somente stderr, usar > /dev/null 2>> / algum / log / arquivoem vez de. Coloque o arquivo de log onde quiser - o seu diretório pessoal, /var/logou mesmo /tmp se você tiver certeza de que não precisará mais mantê-lo.

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


14
2017-07-29 02:40





Um efeito colateral de adicionar /dev/null 2>&1 para o comando cron job, é que ele irá descartar STDERR e STDOUT (Erro padrão, bem como 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 em vez de. 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


10
2017-12-30 17:27



Tanto quanto eu entendi '> / dev / null' só irá enviá-los, e '> / dev / null 2> & 1' será doscard todos os erros? O que eu teria que usar para obter erros no log, mas sem emails? Eu agora não recebo e-mails (como eu quero), mas o feio "não MTA ..." - Pit
afaik, não há como registrar a saída além de enviá-la para emails. A coisa mais próxima que você pode fazer é configurar o postfix para a entrega local de correio (se você executar o sudo apt-get install postfix, ele perguntará se você deseja configurar a entrega local. Sempre que eu fizer login via ssh, vejo um novo e-mail na máquina se um trabalho anterior falhou, acho mais conveniente do que ter que verificar o log. - paneer_tikka
Eu acho que isso poderia ser bom para mim. obrigado - Pit


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

Canalize a saída do seu comando cron através de logger então eles acabam 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 o No MTA installed mensagem 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

8
2017-10-22 22:44



Os pipes funcionam em tarefas agendadas? - CivMeierFan


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

$ crontab -e

Na parte superior do arquivo, insira:

MAILTO=""

https://www.cyberciti.biz/faq/disable-the-mail-alert-by-crontab-command/


1
2018-02-19 05:18