Автоматическое создание резервных копий (Продолжение)

В предыдущей статье мы сделали скрипт который автоматически снимал дамп базы данных, упаковывал его и отсылал на FTP сервер, сейчас мы добавим к нашему сценарию проверку на доступность сервера. Для этого используем netcat и проверку выполнения условия.
Конструкция будет следующая:

#!/bin/bash
HOST="example.com"
PORT="port_number"
if nc -zw 10 $HOST $PORT
then
        echo "Host $HOST avalible, port ${PORT} is up"
else
        echo "Host $HOST not avalible, port ${PORT} is down"
fi

Можете проверить работу скрипта.
Разберём его поподробней:
Оператор if проверяет успешность выполнения команды

nc -zw 10 $HOST $PORT

Где nc — вызов NetCat
-z — запрещает посылать пакеты, получается просто сканирование портов
-w — устанавливает таймаут через который прекратится в сканирование, у нас установлен таймаут в 10 секунд, с ним можно поиграть.
Если все нормально, затем (then) следует выполнение одной части скрипта, если что-то не так, то выполняется другая часть скрипта, этим-то мы и воспользуемся коварно :)
В итоге получим такой сценарий:

#!/bin/bash
# определяем переменные
PORT="port_number"
MUSER="root"
MPASS="password"
DPATCH="/var/backups/db/backup.$(date +%H-%M_%d.%m.%y).sql"
DBGZIP="/var/backups/db/backup.$(date +%H-%M_%d.%m.%y).tar.gz"
FTPU="ftp_usr"
FTPP="ftp_pwd"
FTPS="ftp_ip_or_host_name"
FTPF="dir"
FROM="From: backup@example.com"
TO="To: admin@example.com"
BODY1="Thank you"
BODY2="Wait new message"
# делаем дамп
        mysqldump -u$MUSER -p$MPASS -A > $DPATCH
# упаковываем в архив
        tar czfP $DBGZIP $DPATCH
# удаляем дамп
        rm -rf $DPATCH
# проверяем сервер на доступность, загружаем и отправляем уведомление
if nc -zw 10 $FTPS $PORT

then
        ncftpput -m -u$FTPU -p$FTPP $FTPS $FTPF $DBGZIP
        SUBJECT="Subject: Backup complite"
        BODY="Backup complite $(date +%H:%M-%d.%m.%y) file upload to $FTPS"
else
        SUBJECT="Subject: Backup not complite"
        BODY="WARNING!!! Backup not complite $(date +%H:%M-%d.%m.%y) file not upload to $FTPS"
fi
echo $FROM >> message.tmp
echo $TO >> message.tmp
echo $SUBJECT >> message.tmp
echo $BODY >> message.tmp
echo $BODY1 >> message.tmp
echo $BODY2 >> message.tmp
/usr/sbin/sendmail -t < message.tmp
rm message.tmp

Вот и все.
Можете протестировать сценарий
Напоминаю, что сделать его исполняемым довольно просто:

chmod +x script_name

Обратите внимание у нас добавилась переменная PORT

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.