Резервное копирование в Linux с использованием BASH CRON

Люба х...ня

Резервное копирование на любом сервере является крайне важной задачей. Особенно когда проекты выполняются в течение нескольких месяцев.

Согласитесь, делать каждый день бэкапы проектов, не слишком интересная работа. Или если у вас несколько рабочих машин и на всех нужно делать копии актуальных проектов.

SVN поговорим позже :).

Итак, сегодня создадим скрипт на bash и добавим выполнения скрипта по cron.

Задачи:

Написать скрипт на BASH, который будет создавать резервные копии проекта вместе с БД. Запустить его на исполнение в cron.

Для этого нам нужно:

Создать файл: touch /home/wg/sb

Положить в него скрипт на bash:

#!/bin/bash

HOSTNAME=$1 # Название проекта
DB_NAME=$2 # Название БД
DB_HOST="127.0.0.1" # localhost
DB_USER="root" # пользователь БД
DB_PASS="hp" # пароль пользователя БД
SOURCE_DIRECTORY="/var/www/$HOSTNAME" #Путь к папке с проектом
DIRECTORY_TO_BACKUP="/home/wg/ProjectsBackup/$HOSTNAME/" #Куда бекапити
LOG_FILE="/var/log/ProjectsBackup.log" #Лог файл

function CreateBackup()
{
mysqldump-u$DB_USER-h$DB_HOST-p$DB_PASS $DB_NAME > $SOURCE_DIRECTORY/$DB_NAME.sql
tar-cvzf ${DIRECTORY_TO_BACKUP}`date "+%Y-%m-%d_%s"`.tar.gz $SOURCE_DIRECTORY
echo $?
echo "`date` Создание резервной копии $SOURCE_DIRECTORY завершено." >> $LOG_FILE
}

if [[ ! -d $DIRECTORY_TO_BACKUP ]]; then
echo "`date` Не найден каталог для бэкапа. Создание." >> $LOG_FILE
mkdir-p $DIRECTORY_TO_BACKUP
fi
CreateBackup

###

Думаю, что комментировать его не нужно, так как все понятно. Переменные $1,$2 будут передаваться компндой по крону.

Сделаем наш скрипт виконуємим:

sudo chmod +x /home/wg/sb

Скрипт готов. Осталось запускать его в определенное время. В *nix системах существует такая волшебная вещь как cron. Он позволяет осуществить неоднократный запуск задач. То есть задание можно запустить в определенный день, час, минуту, или запускать через определенный промежуток времени. Наша задача запускать наш скрипт от привилегированного пользователя root. Для создания файла заданий будем использовать crontab. Файлы заданий crontab содержат инструкции для демона cron, который запустит задачу описанное в файле.

Создадим каталог и файл наших задач:

sudo mkdir /home/wg/crontab
sudo nano /home/wg/crontab/sbt

Поместим следующий текст в файл sbt

SHELL=/bin/bash
0 18 */1 * * /home/wg/sb project.loc db_name

Где project.loc - название хоста в на локальном сервере, db_name - название БД Запускаем скрипт от root Используем следующие команды:

sudo crontab /home/wg/crontab/sbt

Вот и все.

Осталось проверить прибавилось задание в cron командой:

sudo crontab-l

Очистить список заданий можно так:

sudo crontab-r

И напоследок.

Описание настроек по crontab

каждая строка в файле /etc/crontab имеет следующий формат:

minute hour day month dayofweek command

Где:

  • minute  любое целое число от 0 до 59.
  • hour  любое целое от 0 до 23.
  • day  любое целое от 1 до 31 (день должен быть корректным, если указан месяц).
  • month  любое целое от 1 до 12 (или краткое название месяца, например: jan, feb и так далее).
  • dayofweek  любое целое от 0 до 7, где 0 или 7 означает воскресенье (или краткое название дня недели, например: sun, mon и так далее).
  • command  команда, которая должна быть выполнена. В нашем случае /home/wg/crontab/sbt.

 

Итоги. Этот примитивный скрипт решает одновременно несколько проблем:

  • Не нужно волноваться "или я сделал бэкап".
  • Экономит ваше время и клиента деньги!

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

Расскажите нам о своем проекте!