Перейти до

Скрипт для BackUp БД Stg


Рекомендованные сообщения

В общем надоела мне проблема с занулением базы на FreeBSD после внезапного выключения света, как результат написал небольшой Shell скрипт, который предназначен для подвешивания в Cron. Скрипт дается как есть, если что-то перестанет работать меня не обвинять :)

 

Описание скрипта:

проверяет нет ли нулевых stat файлов, если таковых нет делает резервную копию пакуя ее в gz архив, в противном случае останавливает STG и восстанавливает поврежденные stat файлы из последнего удачного архива, после чего STG запускается и работает дальше.

 

Сам скрипт:

#!/bin/sh

#Start config

STG_DIR="/usr/local/stargazer"          # Directory with STG DB
BKP_DIR="/usr/local/stg_backup"         # Directory fo backup
MAX_ARC=50                              # Maximum backup files in archive
STG_BIN="/usr/local/sbin/stargazer"     # Path to STG binary
STG_CONF="/usr/local/etc/stargazer"     # Path to STG config

#End config

#--------------------------------------------------------------

#Start script

STG_FILES=`ls ${STG_DIR}/users`
DATE=`date "+%Y-%m-%d_%H:%M:%S"`
ARC_FILES=`ls -t ${BKP_DIR}/arc`

if [ ! -d ${BKP_DIR} ]; then
       mkdir ${BKP_DIR}
fi
if [ ! -d ${BKP_DIR}/src ]; then
       mkdir ${BKP_DIR}/src
fi
if [ ! -d ${BKP_DIR}/arc ]; then
       mkdir ${BKP_DIR}/arc
fi
if [ ! -d ${BKP_DIR}/src/users ]; then
       mkdir ${BKP_DIR}/src/users
fi
if [ ! -d ${BKP_DIR}/rst ]; then
       mkdir ${BKP_DIR}/rst
fi

ARC_CNT="1"
for i in ${ARC_FILES}
do
       if [ ${ARC_CNT} -eq 1 ]; then
               LST_SCS=${i}
       fi
       if [ ${ARC_CNT} -gt ${MAX_ARC} ]; then
               rm ${BKP_DIR}/arc/${i}
               continue
       fi
       ARC_CNT=`expr ${ARC_CNT} + 1`
done

BAD_CNT="0"
for i in ${STG_FILES}
do
       if [ -d ${STG_DIR}/users/${i} ]; then
               eval $(stat -s ${STG_DIR}/users/${i}/stat)
               if [ $st_size -eq 0 ]; then
                       echo ${i} >> ${BKP_DIR}/bad_files.lst
                       BAD_CNT=`expr ${BAD_CNT} + 1`
                       continue
               fi
               if [ ${BAD_CNT} -eq 0 ]; then
                       mkdir ${BKP_DIR}/src/users/${i}
                       cp ${STG_DIR}/users/${i}/conf ${BKP_DIR}/src/users/${i}
                       cp ${STG_DIR}/users/${i}/stat ${BKP_DIR}/src/users/${i}
               fi
       fi
done

if [ ${BAD_CNT} -ne 0 ]; then
       cd ${BKP_DIR}/rst/
       cp ${BKP_DIR}/arc/${LST_SCS} ${BKP_DIR}/rst/
       tar -zxf ${LST_SCS}

       killall stargazer

       BAD_FILES=`more ${BKP_DIR}/bad_files.lst`
       for i in ${BAD_FILES}
       do
               cp -R ${BKP_DIR}/rst/users/${i} ${STG_DIR}/users/
       done

       ${STG_BIN} $STG_CONF

else
       cd ${BKP_DIR}/src/
       tar -zcf ${BKP_DIR}/arc/${DATE}.tar.gz ./*
fi

if [ -f ${BKP_DIR}/bad_files.lst ]; then
       rm ${BKP_DIR}/bad_files.lst
fi

rm -R ${BKP_DIR}/rst/
rm -R ${BKP_DIR}/src/

Ссылка на сообщение
Поделиться на других сайтах
Гость
Эта тема закрыта для публикации сообщений.
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...