57 votes

Cron : Des erreurs apparaissent uniquement dans les courriels ?

J'ai finalement mis en place un programme réaliste de sauvegarde de mes données par le biais d'un Shell Shell, qui est géré par cron à intervalles rapprochés. Malheureusement, je continue à recevoir des emails vides à chaque fois que le CRON a été exécuté et pas seulement lorsque les choses se passent mal.

Est-il possible de faire en sorte que CRON n'envoie des courriels que lorsque quelque chose ne va pas, c'est-à-dire que mes TAR ne s'exécute pas comme prévu ?

Voici comment ma crontab est configurée pour le moment ;

0 */2 * * * /bin/backup.sh 2>&1 | mail -s "Backup status" email@example.com

Merci beaucoup !

72voto

Cakemox Points 23637

Idéalement, vous voudriez que votre script de sauvegarde ne produise rien si tout se passe comme prévu et ne produise qu'en cas de problème. Utilisez alors la variable d'environnement MAILTO pour envoyer toute sortie générée par votre script à votre adresse email.

MAILTO=email@example.com
0 */2 * * * /bin/backup.sh

Si votre script produit normalement une sortie mais que vous ne vous en souciez pas dans cron, envoyez-le simplement à /dev/null et il ne vous enverra un email que lorsque quelque chose est écrit sur stderr.

MAILTO=email@example.com
0 */2 * * * /bin/backup.sh > /dev/null

36voto

Ricardo Pardini Points 756

Utilisation cronique Le wrapper script semble être une bonne idée ; pour l'utiliser, vous n'avez pas besoin de modifier vos script.

の代わりです:

 0 1 * * * /bin/backup.sh 2>&1 | mail -s "Backup status" email@example.com

faire :

 MAILTO=email@example.com
 0 1 * * * cronic /bin/backup.sh

Pour faire simple, il s'exécutera en silence si tout se passe bien (exit status 0), mais il fera un rapport verbeux si ce n'est pas le cas, et laissera cron s'occuper du rapport sur le courrier.

Plus d'informations sur https://habilis.net/cronic/ .

13voto

Akom Points 271

Voici une autre variante que j'utilise avec succès depuis de nombreuses années - capturer la sortie et l'imprimer uniquement en cas d'erreur et déclenche l'envoi d'un courrier électronique. Cela ne nécessite pas de fichiers temporaires et préserve toutes les sorties . La partie importante est le 2>&1 qui redirige STDERR vers STDOUT.

Envoyer la totalité de la sortie via la configuration par défaut du mailer cron :

1 2 * * * OUTPUT=`flexbackup -set all 2>&1` || echo "$OUTPUT"

Idem, mais avec une adresse et un sujet spécifiques :

(l'adresse peut également être modifiée en réglant MAILTO=xxxx pour l'ensemble du fichier crontab)

1 2 * * * OUTPUT=`flexbackup -set all 2>&1` || echo "$OUTPUT" | mail -s "Failed to backup" an@email.address

Vous pouvez même effectuer plusieurs actions sur l'erreur et l'ajouter au courrier électronique :

1 2 * * * OUTPUT=`flexbackup -set all 2>&1` || {echo "$OUTPUT" ; ls -ltr /backup/dir ; }

Cela fonctionne pour les commandes simples. Si vous avez affaire à des tuyaux complexes ( find / -type f | grep -v bla | tar something-or-other ), il vaut mieux déplacer la commande dans un script et exécuter le script en utilisant l'approche susmentionnée. La raison en est que si une partie du tuyau sort vers STDERR, vous recevrez toujours des courriels.

6voto

orzel Points 131

Il s'agit d'un problème très courant qui, de nos jours (2021), peut être résolu en utilisant la fonction "chronic" de l'application moreutils qui est fait exactement dans ce but. Ce paquet est disponible dans la plupart des distributions linux/bsd.

4voto

cosimo Points 1037

Vous donnez des instructions précises cron d'envoyer systématiquement un courrier électronique, même lorsque /bin/backup.sh (d'ailleurs, il devrait se trouver dans /usr/local/bin ) réussit. Il suffit d'omettre l'élément | mail -s "Backup status" email@example.com et le courrier électronique ne sera envoyé qu'en cas de production. Vous pouvez probablement (en fonction de votre cron ) définit explicitement l'adresse électronique à laquelle envoyer le courrier en tant qu'affectation dans le fichier crontab.

Pour plus de détails, voir

man 5 crontab

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X