J'ai un travail cron
qui exécute un script Shell comme suit
00 01 * * * sh /backup/script.sh
Maintenant, je dois ajouter une fonctionnalité dans cron
pour que si ce script n'existe pas, il génère une alerte pour moi par courrier électronique à l'aide de l'utilitaire sendmail
.
Quelque chose comme
00 01 * * * find script and execute script or if find no result then email.
Je vois deux solutions générales. L'une consiste à faire en sorte que cron vous informe des résultats des commandes exécutées. Plus précisément, la page de manuel crontab (5) indique que
cron (8) examinera MAILTO s'il a des raisons d'envoyer des messages à la suite de l'exécution de commandes dans `` cette '' crontab. Si MAILTO est défini (et non vide), un courrier est envoyé à l'utilisateur ainsi nommé.
Il suffit de mettre une ligne comme celle-ci dans la tête de votre fichier crontab:
[email protected]
Si vous souhaitez une solution plus spécialisée, vous pouvez également créer un script et le mettre en place à un endroit où il est garanti qu'il sera trouvé (comme /bin
). Le script lui-même vérifierait si le script réel est présent, si oui, exécutez-le, sinon, vous enverra une notification. Quelque chose dans les lignes suivantes:
#!/bin/bash
myscript=/path/to/your/script
[email protected]
if [ -f "$myscript" ] ; then
exec "$myscript"
else
mail -s "Error running $myscript" $myemail <<EOF
There was an error running the script
$myscript
The script could not be found
EOF
fi
Vous pouvez même le rendre générique:
#!/bin/bash
myscript=$1
shift 1
params=$*
[email protected]
if [ -f "$myscript" ] ; then
exec "$myscript $*"
else
mail -s "Error running $myscript" $myemail <<EOF
There was an error running the script
$myscript
The script could not be found
EOF
fi
cron le fait déjà pour vous. Votre entrée dans crontab dit:
00 01 * * * sh /backup/script.sh
À l'heure prévue, cron exécutera la commande que vous avez spécifiée et vous enverra par courrier électronique sa sortie.
Le résultat de sh /does/not/exist
est: sh: 0: Can't open /does/not/exist
. C’est donc ce que cron vous enverra par courrier électronique si le fichier n’existe pas.
Vous devrez peut-être vous assurer que votre système est configuré correctement pour la messagerie électronique afin que cron puisse vous envoyer un courrier électronique avec succès. Vous avez parlé de sendmail. Si sendmail est configuré correctement et que l'envoi par courrier électronique de votre utilisateur fonctionne, alors cron fonctionnera également.
La variable MAILTO
peut également vous aider si vous avez besoin d'envoyer une adresse électronique par courrier électronique ou si l'envoi d'un courrier électronique à votre utilisateur ne fonctionne pas, mais si vous envoyez un courrier électronique spécifique à Internet. Ajoutez simplement la ligne [email protected]
au-dessus de la ligne existante.
Eh bien, vous aurez besoin d'un autre script. Quelque chose comme ça:
#!/bin/bash
file="/path/to/script.sh"
# if script.sh exists and is executable.
if [ -x $file ]; then
# execute script.sh
sh /path/to/script.sh
else
#send mail
echo "script.sh doesn't exists or is not executable" | sendmail [email protected]
fi