Назад | Перейти на главную страницу

Нужна система предупреждений, если мой скрипт клонирования не работает

Возможный дубликат:
Как повторно вызывать rsync до тех пор, пока файлы не будут успешно перенесены

Я настроил ночной rsync для зеркалирования одного сервера на резервный внешний сервер резервного копирования. Общий объем хранилища данных на первичном сервере составляет 1,5 ТБ. В процессе получения этой работы я столкнулся с многочисленными нестабильностями в среде, которые я, кажется, разобрал, но даже несмотря на то, что теперь она работает, я все еще нервничаю. Это резервный сервер для сценария бедствия, и если произойдет сбой и на резервном сервере не будут синхронизированы все необходимые данные, я останусь без работы.

Таким образом, я хочу создать сценарий для системы, которая будет подтверждать после каждой ночной синхронизации, что данные назначения соответствуют источнику. Я понимаю, что rsync делает это, но если rsync не завершается полностью (что происходило во время устранения неполадок при установке), мне нужно знать.

Какие-либо предложения? Я лучше всего использую Ruby, если это актуально для решения.

Взгляните на размещенное решение PushMon. Сначала вы создаете URL-адрес PushMon. Затем в сценарии, когда код выхода равен 0, вызовите URL-адрес PushMon. Пока вы продолжаете вызывать свой PushMon URL, никакие предупреждения отправляться не будут. Когда ваш сценарий не запускается или зависает и, следовательно, не вызывает URL-адрес PushMon, вы получите уведомление.

Обратите внимание, я связан с PushMon.

Я бы просто установил MTA на машине (sSMTP отлично, если у вас есть доступный смарт-хост), так что любые выходные данные cronjob будут отправлены вам по почте. Бег rsync с участием --quiet должно быть достаточно (т.е. он не должен ничего выводить, если он был успешным, но выводить сообщение об ошибке, если нет), но вы также можете явно проверить его код выхода в скрипте, чтобы убедиться, что есть какой-то вывод.

#!/bin/sh
rsync [...]
CODE=$?
if [ "$CODE" -ne 0 ]; then
    echo "rsync exited with code $CODE"
fi