MaйeR 0 Опубликовано: 2006-02-22 19:27:23 Share Опубликовано: 2006-02-22 19:27:23 В общем надоела мне проблема с занулением базы на 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/ Ссылка на сообщение Поделиться на других сайтах
XoRe 0 Опубліковано: 2006-02-23 01:42:07 Share Опубліковано: 2006-02-23 01:42:07 Ещё можно так: http://local.com.ua/forum/index.php?showto...t=0entry26917 Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения