Обработка ошибок в тематических предложениях [Shell Script]
У меня есть эта настройка, и мне нужно, когда в основном скрипте произошла ошибка, чтобы перенести эту ошибку во временный файл $INFO_PLUGIN, проблема в том, что скрипт продолжает работать после case
и отправьте также сообщение OK во временный файл $INFO_PLUGIN, переопределяя существующее сообщение об ошибке.
Я хотел бы, чтобы при возникновении ошибки, перенести эту ошибку во временный файл $INFO_PLUGIN и предотвратить выполнение reportmail OK;
каким-то образом, но я не знаю как, и мне нужна помощь.
Заранее спасибо за ваше время и сотрудничество.
Основной сценарий:
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 Сценарий:
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
Редактировать:
############################### 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;
}
если я бегу:
[user@server dir]$ ./Test.sh 1
или же:
[user@server dir]$ ./Test.sh 2
это результат, включенный в файл ~/results.txt
[user@server dir]$ cat results.txt
Everything = OK
Результат одинаков во всех случаях, потому что error 0;
на первом скрипте, поэтому мой вопрос, как я могу сделать, чтобы определить, произошла ли ошибка на каком-то значении на первом case
Например, произошла ошибка Test.sh b
, Как я могу сделать, чтобы прыгать error 0;
и запретить его выполнение, если раньше была ошибка, иначе, если нет ошибки на case
, error 0;
должно быть выполнено, чтобы сказать hey, everything is ok!
Я надеюсь, что вы понимаете и большое спасибо за ваше время.
1 ответ
Проблема решена путем добавления этого:
echo -e "CRITICAL - Error deleting files - Performance" > $INFO_PLUGIN && echo "1" > $err
это отправить 1
в файл ошибок и...
if [ `cat $err` -eq 1 ]; then
reportmail 201$BYTES;
rm $err
else
reportmail 201$BYTES;
reportmail OK;
rm $err
fi;
этот тест, если во время выполнения сценариев произошла ошибка, если да, просто отправьте отчет в ordr, чтобы просмотреть журнал на веб-сервере, в противном случае, если все в порядке, отправьте журнал на веб-сервер и отправьте сообщение OK на мониторинг Nagios. система.
Спасибо! & до скорого!