J'ai finalement mis en place un programme de sauvegarde réaliste de mes données via un script shell, géré par cron à intervalles rapprochés. Malheureusement, je reçois des courriels vides chaque fois que le CRON a été exécuté et pas seulement lorsque les choses tournent mal.
Est-il possible de faire en sorte que CRON envoie des courriels en cas de problème, par exemple. monTAR
ne pas exécuter 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!
/bin/backup.sh > log_file || (echo Backup failed with exit status $?; cat log_file)
?L' utilisation de script wrapper cronic semble être une bonne idée; pour l'utiliser, vous n'avez pas à changer vos scripts.
Au lieu de:
faire:
Tout simplement; il fonctionnera en mode silencieux si tout se passe bien (état de sortie 0), mais il signalera verbalement sinon, et laissera cron gérer les rapports de messagerie.
Plus d'informations sur https://habilis.net/cronic/ .
la source
chronic
partir dumoreutils
package: joeyh.nomVous demandez spécifiquement
cron
à toujours envoyer un courrier électronique, même si/bin/backup.sh
(à propos, il devrait être en place/usr/local/bin
) réussit. Il suffit d'omettre la| mail -s "Backup status" [email protected]
pièce et le courrier électronique ne sera envoyé que s'il y a une sortie. Vous pouvez probablement (en fonction de votrecron
) définir explicitement l’adresse email à mail en tant qu’affectation dans le fichier crontab.Pour plus de détails, voir
la source
Vous devriez diriger les
stderr
anmd pas les deuxstdout
etstderr
.1> /dev/null
Ne l' utilisez pas2>&1
et ça devrait aller. En outre, vous devrez peut-être signaler l'erreur correctement dans votre script de sauvegarde.la source
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 entraînant l'envoi d'un courrier électronique. Cela ne nécessite aucun fichier temporaire et conserve toutes les sorties . La partie importante est celle
2>&1
qui redirige STDERR vers STDOUT.Envoyez la totalité de la sortie via la configuration par défaut de cron mailer:
Identique mais avec une adresse et un sujet spécifiques:
(l'adresse peut également être modifiée en définissant MAILTO = xxxx pour l'ensemble du fichier crontab)
Vous pouvez même effectuer plusieurs actions en cas d'erreur et ajouter à un courrier électronique:
Cela fonctionnera pour des commandes simples. Si vous
find / -type f | grep -v bla | tar something-or-other
utilisez des tubes complexes ( ), il est préférable de déplacer la commande dans un script et de l'exécuter en utilisant l'approche susmentionnée. La raison en est que si une partie du tuyau est transmise à STDERR, vous aurez toujours des courriels.la source