Question Erreur «(CRON) (aucun MTA installé, suppression de la sortie)» dans le journal système


J'ai une nouvelle installation d'Ubuntu 12.04.1 LTS sur plusieurs serveurs.

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

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

J'ai mono-complet installé et exécute un serveur Web de pile de service.

Quelle est la meilleure façon pour moi d'empêcher que cela se produise? Je voudrais pouvoir supprimer le pic du processeur.


146
2017-11-27 10:25


origine


Tous les jours à 6h25? Ce sont des scripts de /etc/cron.daily/. Je n’ai qu’un seul essayant d’envoyer du courrier: popularité-contest. Regardez vos scripts et voyez quel script essaie d'envoyer du courrier? Cela devrait le réduire. Puis 'chmod 0644 /etc/cron.daily/script-name' pour empêcher l'exécution.


Réponses:


Linux utilise le courrier pour envoyer des notifications à l'utilisateur. La plupart des distributions Linux ont un service de messagerie (y compris un MTA) installé. 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 à envoyer des messages ait quelque chose à voir avec le pic du processeur (lié au travail sous-jacent que cron exécute). Il peut être plus sûr d'installer un MTA et de lire ensuite les messages (mutt est un bon lecteur de messagerie système).


139
2018-01-01 08:56



Le postfix est-il une bonne chose à installer? Quel MTA est le plus facile à utiliser? - endolith
postfix est le serveur de messagerie le plus utilisé pour Linux, respectez-le - Rápli András
Il est utile de souligner que pour une utilisation avec cron (c’est-à-dire si vous ne voulez pas réellement envoyer de courrier électronique) pendant la procédure d’installation, vous devez répondre pour configurer uniquement pour une utilisation locale. - steffen


Cela se produit parce que vos tâches cron produisent des résultats, puis le démon cron tente de vous envoyer cette sortie par courrier électronique (par exemple, root). Si vous n'avez pas besoin de cette sortie, la manière la plus simple de résoudre ce problème est de la supprimer au niveau de la crontab:

sudo crontab -e

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

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

63
2018-04-26 10:27



Le problème avec cette approche est qu'elle n'explique pas l'utilisation élevée du processeur. Cron essaie clairement d'être communicatif et cela consiste essentiellement à ignorer la sortie. Je serais plus enclin à gérer la sortie que de la supprimer, au cas où il y aurait des informations de débogage utiles. - Oli♦
Oli, même si c'est une vieille question, je suis confronté au même problème, mais c'est sur Raspberry PI. Je vois des tas de No MTA installed, discarding output message dans le journal et mon programme cesse finalement de fonctionner tout seul. Je crois que c'est à cause du pic du processeur. Il semble que toutes les réponses à cette question semblent ignorer cela. - ThN
Pour conserver la sortie, placez la commande dans un script, puis dirigez stdout et stderr sur logger. Par exemple, yourCommand >/dev/null 2>&1 | logger -t mycmd. Cela mettra la sortie dans syslog pour la sauvegarde, et arrêtera les plaintes MTA. - CivMeierFan


Dans mon cas, le message faisait allusion à un problème de permissions avec le script bash, mais je ne pouvais pas le voir avant d'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é à nouveau le job cron:

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.


41
2017-07-10 14:28



Merci pour le commentaire supplémentaire sur la façon de vérifier la boîte aux lettres pour voir les erreurs du travail! - Stuart Allen


Dans crontab ajoutez ceci comme première ligne:

MAILTO=""

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


20
2017-08-27 13:06



Ne mettez aucun commentaire (#) après MAILTO="" ou ça ne marchera pas - SBF


Si vous ne souhaitez pas installer un MTA (dont je n’ai 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 je faisais sur n'importe quel serveur que je vois ce message dans syslog


19
2018-04-17 19:37



Je l'ai fait, mais aucune journalisation n'est ajoutée au fichier. - pir
Etes-vous sûr que le travail cron a été exécuté? - Andrew MacNaughton
Oui, le journal du système indique qu'il est en cours de démarrage. - pir
Vous avez besoin de «2> & 1» à la fin de la ligne pour capturer la sortie vers stderr dans le fichier. - MattSmith


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

crontab -e

(utilisation sudo si le problème est avec crontab de la racine) et ajouter >> / some / log / fichier 2>&1 après chaque commande, comme ceci:

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

S'il y a plusieurs commandes sur une ligne, séparé par ;, &&ou ||, Vous devriez faire ce qui suit pour chaque commande, comme ceci:

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

ou les regrouper, comme ceci:

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

Si vous voulez ignorer stdout et capturer uniquement stderr, utilisation > /dev/null 2>> / some / log / fichierau lieu. 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 garder.

Ensuite, examinez le fichier journal après l'exécution du travail.


13
2017-07-29 02:40





Un effet secondaire de l'ajout /dev/null 2>&1 à la commande de travail cron, est-ce qu'il va jeter les deux STDERR et STDOUT (Erreur standard aussi bien que sortie). Cela fonctionne bien si vous ne voulez pas de courriels de la part de cron. Mais si vous voulez que vos erreurs vous soient envoyées par courrier électronique, utilisez >/dev/null au lieu. Lisez cet article pour plus d'explications.

Vous devrez quand même installer un MTA (agent de transfert de messages) pour envoyer les messages d'erreur. Postfix est assez simple à installer avec: sudo apt-get install postfix


10
2017-12-30 17:27



Si j'ai bien compris, '> / dev / null' ne les enverra que, et '> / dev / null 2> & 1' affichera toutes les erreurs? Que devrais-je utiliser pour obtenir des erreurs dans le journal mais pas de courrier? Je ne reçois maintenant aucun mail (comme je le veux) mais le moche «no MTA…» - Pit
Cependant, il est impossible de consigner la sortie autrement que de l’envoyer à des courriels. La chose la plus proche que vous puissiez faire est de configurer le postfix pour la distribution du courrier local (si vous exécutez "sudo apt-get install postfix", il vous demande si vous voulez configurer la distribution locale. Chaque fois que je me connecte via ssh, je vois un nouvel email sur la machine si un travail précédent a échoué. Je trouve cela plus pratique que de devoir vérifier le journal. - paneer_tikka
Je pense que cela pourrait être ok pour moi. Merci - Pit


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

Pipe la sortie de votre commande cron via logger ils se retrouvent donc dans le syslog.

C'est légèrement plus simple que d'installer postfix, et il place cette sortie dans syslog avec vos autres journaux. Cette commande va capturer stdout AND stderr pour que vous ne voyiez pas la No MTA installed message et vous verrez toutes vos sorties dans le syslog.

Exemple d'entrée cron:

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

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

grep 'mycmd' /var/log/syslog

8
2017-10-22 22:44



Les pipes fonctionnent-elles dans les travaux de cron? - CivMeierFan


Vous pouvez définir MAILTO=”” variable au début de votre crontab fichier. Cela désactivera également l'alerte par courrier électronique. Modifier / Ouvrir 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
2018-02-19 05:18