Comme indiqué dans une réponse précédente, cela arrive parce que vos tâches cron produisent des résultats, et que le démon cron essaie de vous envoyer ce résultat par e-mail. Si vous ne voulez pas (ou ne pouvez pas) installer un MTA, mais que vous voulez voir la sortie, vous pouvez rediriger la sortie de la tâche cron vers un fichier journal. Modifiez votre fichier crontab avec
crontab -e
(utiliser sudo
si le problème se situe au niveau de 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
( >> _/some/log/file_
envoie la sortie standard vers le fichier nommé, en ajoutant à tout contenu existant, et 2>&1
envoie les messages d'erreur au même endroit).
S'il y a plusieurs commandes sur une ligne, séparées par ;
, &
, &&
o ||
, vous devez faire ce qui précède pour chaque commande, comme ceci :
0 3 \* \* \* _cmd1_ >> _/some/log/file_ 2>&1; _cmd2_ >> _/some/log/file_ 2>&1
ou les regrouper, comme ceci :
0 3 \* \* \* **(**_cmd1_; _cmd2_**)** >> _/some/log/file_ 2>&1
Si la ligne de commande se termine par &
, insérer la redirection après la commande mais avant la &
. S'il y a des commandes séparées par |
(un pipeline), la solution simple consiste à les regrouper :
0 3 \* \* \* (_cmd1_ | _cmd2_) >> _/some/log/file_ 2>&1
mais voir aussi le dernier paragraphe, ci-dessous.
Si vous voulez ignorer stdout et capturer uniquement stderr, utilisez > /dev/null 2>> _/some/log/file_
à la place. Mettez le fichier journal où vous voulez - dans votre répertoire personnel, /var/log
ou encore /tmp
si tu es sûr que tu n'auras pas besoin de le garder.
Regardez ensuite le fichier journal après l'exécution de la tâche.
Si vous trouvez un désordre de messages entrelacés, il se peut que le(s) programme(s) écrive(nt) stdout et stderr en même temps avec une mauvaise coordination. Dans ce cas, essayez de les écrire dans des fichiers séparés avec >> _/some/log/file1_ 2>> _/some/log/file2_
. Vous devrez peut-être faire quelque chose de similaire avec les pipelines :
0 3 \* \* \* _cmd1_ 2>> _/some/log/filecmd1err_ | _cmd2_ >> _/some/log/filecmd2_ 2>&1
(Il est probablement aussi préférable d'utiliser des fichiers séparés pour les commandes séparées par &
.)