Я модифицирую сценарий резервного копирования, чтобы сохранить несколько серверов с несколькими службами и разными конфигурациями с помощью bash на сервере Ubuntu.
Я сохраняю результаты команд в файл журнала и отправляю их по почте. Если при резервном копировании произошла ошибка в каком-либо процессе, я хочу предупредить пользователя о конкретной теме письма, поэтому мне нужно узнать, все ли процессы были хороши или нет, и сохранить все журналы в порядке.
Я искал по всему Интернету и не получил удовлетворительного ответа, поэтому теперь прошу вас ...
Как лучше всего это сделать?
Следует ли использовать отдельную конфигурацию для каждого сервера? Или каждая служба получает свой файл сценария, вызывающий то, что ей нужно? Должен ли я использовать исходный код или выполнять сценарии? Как я могу просто узнать, произошла ли ошибка, не повлиявшая на журналы?
NB: изначально я писал на https://superuser.com/questions/1155495/capture-outputs-with-bash-to-log-it-and-alert-user но это кажется более подходящим для Server Fault. Я удалю его, если вы подтвердите.
Если вы всегда отправляете журнал по электронной почте и просто хотите изменить тему сообщения, я думаю, что уместно будет что-то вроде этого:
subject="Backup Log"
# >/some/log.txt will delete the file if it already exists
# "if ! command" checks to see if the command exited with an nonzero code
if ! backup_command >/some/log.txt 2>&1; then
subject="$subject First Backup Failed"
fi
# >>/some/log.txt will append output to the file
if ! other_backup_command >>/some/log.txt 2>&1; then
subject="$subject Second Backup Failed"
fi
# etc
mail -s "$subject" < /some/log.txt
Это предполагает, что ваши команды резервного копирования используют свой код выхода для индикации сбоя.
Для захвата вывода сценариев вы можете либо перенаправить вывод сценария в файл журнала.
my_script.sh 2>&1 >> log.txt
или записать выходные данные отдельных команд в сценарии в файл журнала.
#!/bin/bash
# my_script.sh
command_1 2>&1 >> log.txt
command_2 2>&1 >> log.txt
2> & 1 гарантирует, что ошибки также будут зафиксированы.