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.
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).
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
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.
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 * * * (cmd1; cmd2) >> / 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é.
Dans crontab, ajoutez ceci en première ligne:
MAILTO=""
Cela empêchera cron d’essayer d’envoyer un courrier électronique.
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
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
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
Au début, installez postfix
, qui peut résoudre le problème
Sudo apt-get install postfix
Si Ubuntu, vous pouvez éditer le fichier crontab
Sudo vim /etc/crontab
Attention , éditez le fichier supérieur , pas de code dans la première ligne et entrez
MAILTO=root // current system user
Lorsque cron
exécute une tâche, vous recevrez un courrier électronique.
mail
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.
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/