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.