web-dev-qa-db-fra.com

Erreur "(CRON) info (aucun MTA n'est installé, sortie ignorée)" dans le syslog

J'ai une nouvelle installation d'Ubuntu 12.04.1 LTS et un certain nombre de serveurs.

Je n'ai pas ajouté de tâches cron ni modifié ma crontab sur ces serveurs. Cependant, à peu près au même moment pour chaque machine, j'obtiens un pic de 75% de la CPU et les informations suivantes dans mon syslog au moment du pic:

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

Mono-complete est installé et j'utilise un serveur Web de pile de services.

Quel est le meilleur moyen pour moi d'empêcher que cela se produise? Je voudrais pouvoir enlever le pic du processeur.

180
sungiant

Linux utilise la messagerie pour envoyer des notifications à l'utilisateur. Un service de messagerie (y compris un MTA) est installé sur la plupart des distributions Linux. Ubuntu ne le fait pas.

Vous pouvez installer un service de messagerie, postfix par exemple, pour résoudre ce problème.

Sudo apt-get install postfix

Ou vous pouvez l'ignorer. Je ne pense pas que l'incapacité de cron d'envoyer des messages ait quelque chose à voir avec le pic du processeur (lié au travail sous-jacent que cron est en cours d'exécution). Il peut être plus sûr d’installer un MTA puis de lire les messages (mutt est un bon lecteur de courrier système).

162
martin

Cela se produit parce que vos tâches cron produisent une sortie, puis le démon cron tente de vous envoyer cette sortie par e-mail (par exemple, root). Si vous n'avez pas besoin de cette sortie, le moyen le plus simple de résoudre ce problème est de le supprimer à la crontab:

Sudo crontab -e

et ajoutez >/dev/null 2>&1 à chaque travail:

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

Dans mon cas, le message faisait allusion à un problème d'autorisations avec le script bash, mais je ne pouvais le voir qu'après avoir installé un MTA.

Comme suggéré j'ai couru:

Sudo aptitude install postfix

J'ai choisi "Local" lors de l'installation et après avoir exécuté le travail cron à nouveau:

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

Dans mon cas j'ai remplacé

<user>

avec "root".

J'ai ensuite pu voir la sortie d'erreur liée aux autorisations.

51
Martin Carstens

Comme indiqué dans une réponse précédente, cela se produit parce que vos tâches cron produisent une sortie, puis le démon cron tente de vous envoyer cette sortie par courrier électronique. Si vous ne voulez pas (ou ne pouvez pas) installer un MTA, mais que vous voulez voir le résultat, vous pouvez rediriger le résultat du travail cron vers un fichier journal. Editez votre fichier crontab avec

crontab -e

(utilisez Sudo si le problème concerne la crontab de root) et ajoutez >> /some/log/file 2>&1 après chaque commande, comme ceci:

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

S'il y a plusieurs commandes sur une ligne, séparées par ;, && ou ||, procédez comme ci-dessus pour chaque commande, comme suit:

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

ou groupez-les, comme ceci:

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

Si vous souhaitez ignorer stdout et ne capturer que stderr, utilisez plutôt > /dev/null 2>> /some/log/file. Placez le fichier journal où vous voulez - votre répertoire personnel, /var/log ou même /tmp si vous êtes certain de ne pas avoir besoin de le conserver.

Ensuite, consultez le fichier journal une fois le travail exécuté.

28
G-Man

Dans crontab, ajoutez ceci en première ligne:

MAILTO=""

Cela empêchera cron d’essayer d’envoyer un courrier électronique.

26
88weighed

Si vous ne souhaitez pas installer un MTA (ce dont je n'ai actuellement pas besoin), vous pouvez diriger les résultats du travail cron vers un fichier journal.

Sudo crontab -e

alors avec votre travail cron ressemblerait à ceci.

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

alors vous pouvez simplement suivre le journal et voir ce qui s'est passé

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

C’est ce que j’ai fait sur n’importe quel serveur où je vois ce message dans syslog

21
Andrew MacNaughton

C'est une vieille question, mais il y a une réponse supplémentaire qui est utile dans certaines circonstances.

Transférez le résultat de votre commande cron à travers logger pour qu'ils aboutissent dans le syslog.

C'est un peu plus facile que d'installer postfix, et il met cette sortie dans syslog à côté de vos autres journaux. Cette commande capturera stdout ET stderr afin que vous ne voyiez pas le message No MTA installed et que toutes vos sorties apparaissent dans le syslog.

Exemple d'entrée cron:

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

Vous pouvez afficher les journaux avec votre tag mycmd en utilisant:

grep 'mycmd' /var/log/syslog
13
Michael Hunter

L’ajout de /dev/null 2>&1 à la commande cron job a notamment pour effet de supprimer à la fois les noms STDERR et STDOUT (erreur standard et sortie). Cela fonctionne très bien si vous ne voulez pas d’emails de la part de cron. Mais si vous souhaitez que vos erreurs vous soient envoyées par courrier électronique, utilisez plutôt >/dev/null. Lisez ce blog pour plus d'explications .

Vous devrez néanmoins installer un agent de transfert de courrier (MTA) pour envoyer les courriels d'erreur. Postfix est assez simple à installer avec: Sudo apt-get install postfix

10
paneer_tikka
  1. Au début, installez postfix, qui peut résoudre le problème

    Sudo apt-get install postfix
    
  2. Si Ubuntu, vous pouvez éditer le fichier crontab

    Sudo vim /etc/crontab
    
  3. Attention , éditez le fichier supérieur , pas de code dans la première ligne et entrez

    MAILTO=root // current system user
    
  4. Lorsque cron exécute une tâche, vous recevrez un courrier électronique.

    mail
    
2
shahramlu

J'ai eu ce problème en utilisant le outils Kitematic Docker.
Allez au conteneur magento et cliquez sur exe.

Puis courir

apt-get update

C'est si vous essayez de faire tourner magento sur kitematic. Le journal affichera cette erreur sur la machine virtuelle:

besoin de mise à jour.

Désolé si cela vous a perdu, mais c'est comme ça que ça marche. Vous continuez à vous perdre, mais lisez à ce sujet et les morceaux se réuniront un jour. Sois patient.

1
Ali Bayati

Vous pouvez définir la variable MAILTO=”” au début de votre fichier crontab. Cela désactivera également les alertes par courrier électronique. Editez/ouvrez vos tâches cron:

$ crontab -e

En haut du fichier, entrez:

MAILTO=""

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

1
Damien Cuvillier