сценарий удара предупреждает на ошибке

При первой установке Exchange это - установка, чтобы ожидать, что почта прибудет из Граничного Транспортного Сервера, настроит его так, чтобы это была единственная установка сервера существуют некоторые изменения, которые необходимо внести. Я предложил бы выполнить шаги в этой статье для получения вещей настройки, как Вы хотите.

4
задан 27 March 2011 в 21:45
4 ответа

У Вас может быть ряд команд, продолжают выполняться до "отказа" при помощи "&&" для выполнения команд по очереди; каждая команда возвращает "true", заставляя следующую команду работать. Затем используйте "||" для выполнения команды на отказ, такой как:

#!/bin/bash

cp foo bar \
  && mv bar bar{,.bak} \
  && echo "good so far" \
  && ls file123 | tee -a /tmp/msg.txt \
  && mailx -u user -s "success" -f /tmp/msg.txt \
  ||  mailx -u user -s "failure" -f ~/err.txt

Так как это может стать грязным, использовать функции, такой как

#!/bin/bash

do_work() {
  mv... || return 1
  cp... || return 1
  return 0
}

report() {
  [ "$1" = "ok" ] && mailx ....
  [ "$1" != "ok" ] && mailx -s "$1" ....
  return 0
}

do_work \
  && report ok 
  || report err

Далее, продолжая от вышеупомянутого примера, можно добавить всеохватывающие нормы через 'прерывание' в сценарии, который будет всегда выполнять определенные команды, если какой-либо тип ошибочного состояния будет возвращен в какой-либо точке в сценарии (включая получение управления-c (прерывание) сигнал, в то время как сценарий работает):

#!/bin/bash
tmp=/tmp/msg.$$.txt

# Cleanup: delete tmp files on exit. On any error, trap and exit... then cleanup
trap 'echo "cleaning up tmpfiles..." && rm $tmp >/dev/null 2>&1' 0
trap "exit 2" 1 2 3 15

...

do_work && exit 0

(Правовая оговорка... управляет показанный выше, общий псевдокод, и просто введенный из памяти, не выполняя их. Опечатки, конечно, существуют.)

4
ответ дан 3 December 2019 в 02:25

Bash не имеет никого созданным в предупреждении для этого материала, необходимо записать это в сценарий путем проверки $? переменная (содержит код выхода последней команды выполнения), и принятие мер по нему.

Очень простая проверка, на которую были бы похожи электронные письма:

if [ $? -ne 0 ]
then
    <send me email however you want to about failure>
else
    <send me email about success how ever you want> 
fi

Обязательно проверьте Вашу документацию команды, чтобы удостовериться, что успешное выполнение устанавливает код выхода 0.

6
ответ дан 3 December 2019 в 02:25

Вы используете обертку команды mailwrap, та, которая выбирает некоторые варианты, указывающие, кто отправить по почте к, прежде, чем выполнить команду, которая является ее параметром. mailwrap управляют, только посылает электронное письмо, если там производится, или если сценарий перестал работать. Там существует много вариантов, и они - хорошие упражнения для записи себя, если Вам не нравятся они, Вы находите.

На #! строка самого сценария, Вы используете -e, так, чтобы любой конвейер команд, который перестал работать, заставил сценарий прерываться в той точке. Вы могли бы также использовать -u, прерываться при использовании переменной сброса.

Чтобы иметь провальную команду не прерывают сценарий, Вы добавляете || true, читайте как "или верный", так, чтобы отказ не имел значения. (Более идиоматически, || : который является тем же самым).

Если Вы хотите видеть точно, где обычно тихая команда перестала работать, Вы используете команду mailwrap, которая не посылает электронное письмо только из-за вывода к stderr, и затем Вы используете -v на оболочке #! строка, для трассировки команд, поскольку они собираются быть выполненными.

3
ответ дан 3 December 2019 в 02:25

Или передайте вывод по каналу сценария в почту вообще, результат состоит в том, пока Вы не рады, что это работает.

Что-то как:

(cat $resultofscript) | mailx -s "Subject" me@me.com

1
ответ дан 3 December 2019 в 02:25

Теги

Похожие вопросы