Крон: Только получите ошибки в электронных письмах?

Если я не ошибаюсь, это - действительно функция NIC\driver в сервере а не переключателе. Это кажется, что Вы желаете настроить SFT (переключите отказоустойчивость), конфигурация на каждом сервере. Я никогда не видел сделанный на уровне коммутатора, только на уровне сервера. что NIC имеют серверы, и они поддерживают объединение в команду?

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

39
задан 24 January 2011 в 11:40
6 ответов

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

MAILTO=email@example.com
0 */2 * * * /bin/backup.sh

Если Ваш сценарий обычно производит вывод, но Вы не заботитесь об этом в кроне, просто отправил его в/dev/null, и он пошлет Вам по электронной почте только, когда что-то будет записано в stderr.

MAILTO=email@example.com
0 */2 * * * /bin/backup.sh > /dev/null
54
ответ дан 28 November 2019 в 19:46

Вы конкретно сообщаете cron всегда посылать электронное письмо, даже когда /bin/backup.sh (между прочим, это должно быть в /usr/local/bin) успешно выполняется. Просто опустите | mail -s "Backup status" email@example.com часть и электронная почта будут только отправлены, когда там будет произведен. Вы можете, вероятно (в зависимости от Вашего cron) явно установите адрес электронной почты на почту к как присвоение в crontab файле.

Для получения дополнительной информации посмотрите

man 5 crontab
4
ответ дан 28 November 2019 в 19:46

Необходимо направлять stderr anmd не оба stdout и stderr.

Использовать 1> /dev/null нет 2>&1 и это должно быть прекрасным. Кроме того, Вы, возможно, должны сообщить об ошибке правильно в Вашем резервном сценарии.

3
ответ дан 28 November 2019 в 19:46

Использование сценария оболочки cronic кажется хорошей идеей; чтобы использовать его, вам не нужно менять свои сценарии.

Вместо:

 0 1 * * * /bin/backup.sh 2>&1 | mail -s "Backup status" email@example.com

do:

 MAILTO=email@example.com
 0 1 * * * cronic /bin/backup.sh

Проще говоря; он будет работать беззвучно, если все работает нормально (статус выхода 0), но в противном случае он будет сообщать подробные сведения и позволить cron обрабатывать почтовые отчеты.

Дополнительная информация на https://habilis.net/cronic/ .

23
ответ дан 28 November 2019 в 19:46

Вот еще один вариант, который я успешно использовал в течение многих лет - захват вывода и его распечатка только при ошибке , запускающей электронную почту. Для этого не требуются временные файлы, а сохраняет весь вывод . Важной частью является 2> & 1 , который перенаправляет STDERR на STDOUT.

Отправить весь вывод через конфигурацию почтовой программы cron по умолчанию:

1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || echo "$OUTPUT"

То же, но с определенным адресом и темой:

(адрес также можно изменить, установив MAILTO = xxxx для всего файла crontab)

1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || echo "$OUTPUT" | mail -s "Failed to backup" an@email.address

Вы даже можете выполнить несколько действий при ошибке и добавить в электронную почту:

1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || {echo "$OUTPUT" ; ls -ltr /backup/dir ; }

Это будет работать для простых команд. Если вы имеете дело со сложными каналами ( find / -type f | grep -v bla | tar something-or-other ), вам лучше переместить команду в сценарий и запустить сценарий, используя вышеупомянутый подход. Причина в том, что если какая-либо часть канала выводится в STDERR, вы все равно будете получать электронные письма.

3
ответ дан 28 November 2019 в 19:46

Это очень распространенная проблема, и в настоящее время (2021 г.) лучше всего решается с помощью "хроники" из пакета moreutils, который сделан именно для этой цели. Этот пакет доступен в большинстве дистрибутивов Linux/BSD.

1
ответ дан 3 June 2021 в 19:50

Теги

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