
Решил сделать скрипт загрузки backup с проверкой статуса сервера.
Есть vps в облаке ovh.
Решили на ней поднять зеркало сайта одного, держать как резерв.
Так вот, структура такая скрипта.
С начало запускаем наше облако.
После уходим в сон на 40 минут, так как облако запускается долго (с полки запускается).
Следующий пункт, цикл сверки статуса сервера, если статус сервера в облаке ACTIVE, если иной статус то спим 10 минут и после заново проверка.
То происходит отправка письма, что backup начат и происходит загрузка по ssh backup.
В конце закрываем сервер (ложем его на полку, отключаем).
У скрипта так же есть функция счетчика проверок.
20 раз он может проверить статус и после закрыться, что бы не получился бесконечный, не убиваемый скрипт.
Интервал проверок зависит от sleep, в нашем случае это 10 минут.
i=0 i=$((i+1)) [ $i -eq 20 ] && exit
Сам скрипт.
#!/bin/sh
STAT="/usr/local/bin/php /usr/local/www/serv.php --status"
DT=`date +"%d-%m-%Y"`
DT_YESTERDAY=`date -v-1d +"%d-%m-%Y"`
# Запускаем с проверкой условия, если первый раз ошибка запуска, то делаем еще раз запуск.
if /usr/local/bin/php /usr/local/www/serv.php --unshelve
then
/bin/sleep 3600
else
/bin/echo "Повторно запускаем с полки впску, предыдущий раз не удачный, время ${TM}." | /usr/bin/mail -s "Повторно поднимаем с полки впску." bac@ya.local
/bin/sleep 600
/usr/local/bin/php /usr/local/www/ovh/mir_ovh_serv.php --unshelve
/bin/sleep 3600
fi
i=0
# Сверка статуса сервер, если статус сервера ACTIVE то загружаем, в ином случае спим 10 минут и заново проверка.
while [ "$($STAT)" != "ACTIVE" ]
do
i=$((i+1))
[ $i -eq 20 ] && /bin/echo "Облако OVH не запустилось, 20 попыток поднятия облака закончились, время ${TM}." | /usr/bin/mail -s "Проблема в поднятии облака OVH ${DT}." bac@ya.local && exit
/bin/sleep 600
done
/bin/echo "Начало загрузка backup на сервер, статус облако "$($STAT)"." | mail -s "Начало загрузка backup в облако." bac@ya.local
/usr/bin/ssh -p 22 root@3.2.1.6 /bin/rm -rf /mnt/backup/fil/$DT_YESTERDAY
/usr/bin/ssh -p 22 root@3.2.1.6 /bin/rm -rf /mnt/backup/sql/$DT_YESTERDAY
/usr/bin/scp -r -P 22 /mnt/backup/fil/${DT} root@3.2.1.6:/mnt/backup/fil/
/usr/bin/scp -r -P 22 /mnt/backup/sql/${DT} root@3.2.1.6:/mnt/backup/sql/
MON_FIL=`/usr/bin/ssh -p 22 root@3.2.1.6 /usr/bin/du -sh /mnt/backup/fil/${DT} | /usr/bin/egrep -o "[0-9]{1,3}G"`
MON_SQL=`/usr/bin/ssh -p 22 root@3.2.1.6 /usr/bin/du -sh /mnt/backup/sql/${DT} | /usr/bin/egrep -o "[0-9]{1,3}M"`
/bin/echo "Конец загрузки backup на сервер ${DT}, статус облако "$($STAT)". Размер backupa файлов $MON_FIL, размер backup базы $MON_SQL." | /usr/bin/mail -s "Конец загрузки backup в облако ${DT}." bac@ya.local
/usr/local/bin/php /usr/local/www/serv.php --shelve
exit 0
Вот и весь скрипт backup с проверкой статуса сервера.
Backup на ftp.