Резервне копіювання в Linux з використанням BASH + CRON
- 5 Березня 2014
- Volodymyr Hodiak
- Розробка
- 7743
Резервне копіювання на будь-якому сервері є вкрай важливим завданням. Особливо коли проекти виконуються протягом кількох місяців.
Погодьтесь, робити кожного дня бекапи проектів, не надто цікава робота. Або якщо у вас кілька робочих машин і на всіх потрібно робити копії актуальних проектів.
Про 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.
Підсумки. Цей примітивний скрипт вирішує одночасно декілька проблем:
- Не потрібно хвилюватись "чи зробив я бекап".
- Економить ваш час і гроші клієнта!
Далі політ фантазій. В можете його розширити, наприклад, наші всі проекти на стадії розробки бекапляться на один сервер з усіх робочих машин.