You are here

Скрипт — помощник сайтостроителя под *nix

Преамбула:
Каждый, перешедший с Windows на альтернативную платформу, поначалу испытал жуткое неудобство. Однако, те, кто проникся духом POSIX, ощутили безграничность возможностей в плане автоматизации.

Задрало копирование файлов и слив дампов в процессе модификации движка. Помнить каждое внесённое изменение сил нет, осваивать SVN и прочее лень.
Через некоторое время родился скрипт на Bourne shell для FreeBSD. Он производит бэкап файлов и базы сайта, а так же, их восстановление в случае необходимости в несколько нажатий клавиш!
Как создать резервную копию:

wdbackup "Сюда напишем всё об этом файле. Да, это важный бэкап."

Создастся директория с файлами резервной копии, содержащая в своём имени дату (месяц, день) и время (часы, минуты).
Картина при вызове скрипта по ключевому слову wdbackup из системного окружения:

 wdbackup
------------------------------------------------------------------------
List of available backups:
------------------------------------------------------------------------
[1] 2012-07-28_13:51 Не установленный
[2] 2012-07-28_14:07 Установленный с языковым паком
------------------------------------------------------------------------
Enter number of backup to restore, or 0 to exit

Здесь надо ввести номер восстанавливаемого бэкапа, либо отказаться.
Непосредственно сам код скрипта, украшайте по своему разумению:
Файл wdbackup

 

#!/bin/sh
##### Скрипт бэкапа и восстановления сайта на локалхосте. 
#Для бэкапа наберите: wdbackup "Это комментарий"
#Для восстановления наберите wdbackup, а затем выберите нужное действие из меню.
#Сделать доступным во всей системе можно, поместив в  /usr/local/bin
 
###Path without trailing slash!
#Директория, подлежащая архивации
DIR_TO_BACKUP="forum"
#Вышележащая директория, абсолютный путь
PATH_TO_DOC_DIR="/usr/local/www/apache22/data"
#Абсолютный путь до склада с бэкапами
PATH_TO_BACKUP="/usr/home/denis/Store/BACKUP/sites/dev"
 
MYSQL_USER="test"
MYSQL_DB="test"
MYSQL_PASS="test"
 
#======Далее ничего менять не надо!===========================================================
 
COMMENT=$*
DO_BACKUP=1
COUNT=1
 
if [ "${COMMENT}" = "" ]; then
    DIR_LIST=`ls ${PATH_TO_BACKUP}/`
    echo ------------------------------------------------------------------------    
    echo List of available backups:
    echo ------------------------------------------------------------------------
    for DIR in ${DIR_LIST}; do
	COMMENT=`cat ${PATH_TO_BACKUP}/${DIR}/readme.txt`
	echo [${COUNT}]	${DIR}	${COMMENT}
	COUNT=`expr ${COUNT} + 1`
    done
 
    echo ------------------------------------------------------------------------
    echo "Enter number of backup to restore, or 0 to exit"
    read DIR_NUMBER	
    COUNT=1
    for DIR in ${DIR_LIST}; do
	if  [ "${COUNT}" = "${DIR_NUMBER}" ]; then
	    echo Restoring ${PATH_TO_BACKUP}/${DIR}
	    rm -fr ${PATH_TO_DOC_DIR}/${DIR_TO_BACKUP}/?*
	    tar xvfz ${PATH_TO_BACKUP}/${DIR}/files.tar.gz -C ${PATH_TO_DOC_DIR} ${DIR_TO_BACKUP}
	    echo ------------------------------------------------------------------------
	    echo Content of directory \"${DIR_TO_BACKUP}\" restored.
	    mysqladmin -u${MYSQL_USER}  -p${MYSQL_PASS} drop -f ${MYSQL_DB} 
	    mysqladmin -u${MYSQL_USER}  -p${MYSQL_PASS} create ${MYSQL_DB}
	    mysql -u${MYSQL_USER}  -p${MYSQL_PASS} ${MYSQL_DB}  < ${PATH_TO_BACKUP}/${DIR}/base.sql
	    echo Database \"${MYSQL_DB}\" restored from dump.
	fi
	COUNT=`expr ${COUNT} + 1`
    done
    DO_BACKUP=0
fi
 
if [ "${DO_BACKUP}" = "1" ]; then
    DATE=`date "+%m%d_%H%M"`
    DIR_NAME=${DATE}
    mkdir ${PATH_TO_BACKUP}/${DIR_NAME}
    mysqldump -u${MYSQL_USER}  -p${MYSQL_PASS} ${MYSQL_DB} >  ${PATH_TO_BACKUP}/${DIR_NAME}/base.sql
    tar cvfz ${PATH_TO_BACKUP}/${DIR_NAME}/files.tar.gz -C ${PATH_TO_DOC_DIR} ${DIR_TO_BACKUP}
    echo "${COMMENT}" > ${PATH_TO_BACKUP}/${DIR_NAME}/readme.txt
fi

Собственно, про появление такого помощника в системном окружении ясно из тела скрипта, поясню, что надо закинуть его по путям, доступным из Path, и задать исполняемые для всех аттрибуты.

Рубрика: 

Comments

Add new comment

CAPTCHA
Ответьте на простой вопрос, посмотрим, нужны ли нам ваши комментарии…
Image CAPTCHA
Enter the characters shown in the image.