web-dev-qa-db-fra.com

Cron pour envoyer un email si le fichier n'existe pas

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.
1
Tarun

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
3
January

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.

2
Robie Basak

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
1
Radu Rădeanu