Резервное копирование в Linux с использованием BASH CRON
- 5 Марта 2014
- Volodymyr Hodiak
- Разработка
- 4453
Резервное копирование на любом сервере является крайне важной задачей. Особенно когда проекты выполняются в течение нескольких месяцев.
Согласитесь, делать каждый день бэкапы проектов, не слишком интересная работа. Или если у вас несколько рабочих машин и на всех нужно делать копии актуальных проектов.
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.
Итоги. Этот примитивный скрипт решает одновременно несколько проблем:
- Не нужно волноваться "или я сделал бэкап".
- Экономит ваше время и клиента деньги!
Далее полет фантазий. В можете его расширить, например, наши все проекты на стадии разработки бекапляться на один сервер со всех рабочих машин.