Bash - успех или неудача - сначала отправьте письмо, а затем выйдите - PullRequest
0 голосов
/ 22 июня 2019

Я хотел бы запустить bash-скрипт на целевом сервере, всякий раз, когда не удается выполнить какую-либо команду, я хотел бы сначала отправить электронное письмо с информацией об ошибке и причинах ее сбоя, а затем выйти из программы

У меня естьпопытался перенаправить все выполнение bash-скрипта в файл журнала и отправить по электронной почте файл журнала.

Сейчас я получаю электронное письмо с содержимым file.log только после успешного выполнения сценария, но я хотел бы получитьэлектронная почта, даже если это не удалось, с деталями.Пожалуйста, помогите.

exec > file.log 2>&1 

case $(hostname) in
abcd|defg)
blah
blah
;;

ghij|klmn)
blah
eg: command failed here due to file not present
blah
;;

*) echo "Not found"
esac
echo -e "Sending $(cat file.log)" | mailx -s "Status" abcd@abcd.com

1 Ответ

0 голосов
/ 22 июня 2019

Попробуйте это:

Я не знаю, какую команду вы используете, поэтому я использовал PING:

 #!/bin/bash

 status() {
 for hosts in 192.168.1.1 192.168.1.2 192.168.1.3 192.168.1.250; do
    ping -t 1 -c 1 "$hosts";
 if [[ "$?" -gt "0" ]]; then
    echo -e "Host is down: '$hosts'" >> error.log
 fi
 done
 }

 failedornot() {
 while read line; do
    grep -q "down" error.log
 if [[ $? -eq "0" ]]; then
    echo -e "Something went wrong, sending e-mail report to: abcd@abcd.com"
    cat error.log | mailx -s "Status" abcd@abcd.com
    rm error.log
 else
    echo "Everything is fine, executing blabla.sh"
 fi

     done < error.log
 }

 status
 failedornot

выход

Host is down: 192.168.1.250
Something went wrong, sending e-mail report to: <username>..
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...