J'ai cette configuration et j'ai besoin quand une erreur s'est produite dans le script principal, pour porter cette erreur dans un fichier temporaire $ INFO_PLUGIN, le problème est que le script continue de fonctionner après case
et envoie également un message OK au fichier temporaire $ INFO_PLUGIN, en remplaçant l'erreur existante message.
J'aimerais, lorsqu'une erreur se produit, porter cette erreur dans le fichier temporaire $ INFO_PLUGIN et empêcher son exécution d' reportmail OK;
une manière ou d'une autre, mais je ne sais pas comment et j'ai besoin d'aide.
Merci d'avance pour votre temps et votre coopération.
Script principal:
source ~/share/mailReport.fn
case $2 in
firstcase)
ssh -q -n loguser@server "mkdir -p /home/loguser/logstorage"
if [[ $? -ne 0 ]]; then
echo " ************ "
echo " * Error * "
echo " ************ "
reportmail 12;
exit 12;
fi;
;;
secondcase)
startDate=`date +%s`
if [ -z $3 ]; then
echo -e "\nInsert a parameter...: $0 $1 $2 [Here!]\n"
exit;
fi;
echo -e "\nRunning test with error number...: $3\n"
endDate=`date +%s`
DIFF=$(( $endDate - $startDate ))
echo -e "* Time in sec..: $DIFF\n"
reportmail $3;
;;
esac
echo " ************ "
echo " * Finished * "
echo " ************ "
reportmail OK;
reportMail.sh Script:
case $1 in
12)
mailx -s "Error happened during mkdir" -r $SENDER_ADDRESS $RECIPIENT_ADDRESS
<<EOF
Hello,
Error happened in `uname -n` bla, bla, bla...
EOF
echo -e "CRITICAL - Error creating destination dir" > $INFO_PLUGIN
;;
OK)
echo -e "OK - Time in sec..: $DIFF Total Saved..: `cat $temp` MB" > $INFO_PLUGIN
rm $temp
;;
esac
Modifier:
############################### Little example ###############################
test.sh
#!/bin/sh
source ~/test2.sh
case $1 in
a) error 0; ;;
b) error 1; ;;
c) error 2; ;;
esac;
error 0; # This is what I need to jump in case of error
test2.sh:
#!/bin/sh
function error () {
case $1 in
0) echo "Everything = OK" > ~/results.txt ;;
1) echo "Sth Wrong = error 2" > ~/results.txt ;;
2) echo "Sth Wrong = error 3" > ~/results.txt ;;
esac;
}
si je cours:
[user@server dir]$ ./Test.sh 1
ou:
[user@server dir]$ ./Test.sh 2
c'est le résultat, inclus dans le fichier ~ / results.txt
[user@server dir]$ cat results.txt
Everything = OK
Le résultat est le même dans tous les cas, car error 0;
lors du premier script, ma question est donc la suivante: comment puis-je déterminer si une erreur est survenue sur une valeur en premier case
, par exemple: erreur est en cours d'exécution Test.sh b
. Comment puis-je faire pour sauter error 0;
et empêcher de l'exécuter s'il y a une erreur avant, sinon s'il n'y a pas d'erreur case
. error 0;
devrait être exécuté pour direhey, everything is ok!
J'espère que vous comprenez et merci beaucoup pour votre temps.
test.sh
vous dites:error 0; # This is what I need to jump in case of error
. Alors, votre question est: comment puis-je obtenir une branche par défautcase...esac
? Si c'est le cas, la réponse est d'utiliser*)
comme dernier cas.error 0;
sera exécuté à la fin du script et envoie un message OK au fichier results.txt. Sinon, si une erreur survient, le message ERROR sera envoyé à results.txt par le script seconf, mais seulement pendant une seconde jusqu'à ce que le premier script soit exécuté une fois de pluserror 0;
et remplace le message ERROR dans le fichier results.txt.Réponses:
Problème résolu en ajoutant ceci:
cette envoyer un
1
à un fichier d'erreur et ...ce test si une erreur s'est produite lors de l'exécution des scripts, si oui, envoyez simplement le rapport dans l'ordre pour afficher le journal sur un serveur Web, sinon, si tout est en ordre, envoyez le journal à un serveur Web et envoyez un message OK à la surveillance Nagios système.
Merci! & jusqu'à la prochaine fois!
la source