1

У меня есть эта настройка, и мне нужно, когда в основном скрипте произошла ошибка, чтобы перенести эту ошибку во временный файл $ 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 ответ1

0

Проблема решена путем добавления этого:

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. система.

Спасибо! & до скорого!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .