Скриптинг

Простой и эффективный Bash-скрипт для резервного копирования сайта на Linux

Резервное копирование — это не просто лучшая практика, это страховка от непредвиденных обстоятельств. Для небольших проектов, блогов и личных серверов не всегда нужны сложные системы. Иногда идеальным решением является простой и надежный bash-скрипт, запускаемый по расписанию. В этой статье мы разберем один из таких скриптов, который автоматически создает бэкапы и удаляет устаревшие архивы.

Для чего нужен этот скрипт?

  • Автоматическое создание бэкапов: Скрипт упаковывает указанную директорию (например, файлы вашего сайта) в сжатый архив с датой в названии.
  • Умное хранение: Он автоматически удаляет архивы, созданные более 30 дней назад, чтобы предотвратить переполнение диска.
  • Простота и надежность: В основе лежат стандартные UNIX-утилиты (tar, find, date), что гарантирует работу на любом сервере.

Код скрипта и его построчный разбор

#!/bin/bash
# Получаем текущую дату в формате ГГГГ-ММ-ДД
TIME=$(date +%F)
# Задаем, сколько дней хранить бэкапы                        
KEEP_BACKUPS_FOR=30
# Формируем имя архива: backup-www-2024-05-27.tar.gz	   
FILENAME=backup-www-$TIME.tar.gz
# Директория, которую будем архивировать (укажите свою)                  
SRCDIR=/var/www/html
# Целевая директория для хранения архивов (укажите свою)                    
DESDIR=/backup

# Функция для удаления старых бэкапов
function delete_old_backups() {
  find $DESDIR -type f -name "*.tar.gz" -mtime +$KEEP_BACKUPS_FOR -exec rm {} \;
}

# Вызываем функцию очистки перед созданием нового бэкапа
delete_old_backups
# Создаём новый сжатый архив
tar -cpzf $DESDIR/$FILENAME $SRCDIR

Как использовать этот скрипт?

Шаг 1: Создайте файл скрипта Скопируйте приведенный выше код в текстовый редактор. Сохраните файл на вашем сервере с удобным именем, например, backup.sh.

Шаг 2: Настройте пути Внимательно проверьте и измените переменные SRCDIR (что архивировать) и DESDIR (куда сохранять). Убедитесь, что пользователь, от которого будет запускаться скрипт, имеет права на чтение исходной директории и запись в целевую.

Шаг 3: Сделайте скрипт исполняемым В терминале выполните команду:

chmod +x /путь/до/вашего/backup.sh

Шаг 4: Настройте автоматизацию с помощью Cron Чтобы скрипт запускался автоматически каждый день, добавьте задание в планировщик cron. Для этого откройте crontab для редактирования:

crontab -e

И добавьте следующую строку, чтобы запускать скрипт каждый день в 3:00 ночи (не забудьте указать правильный путь к скрипту):

0 3 * * * /путь/до/вашего/backup.sh

Возможные улучшения скрипта

Предложенный скрипт — отличная основа. Вот несколько идей, как его можно доработать под свои нужды:

  • Верификация архива: Добавьте команду проверки целостности архива после его создания (например, tar -tzf $DESDIR/$FILENAME > /dev/null && echo "Backup OK").
  • Логирование: Перенаправьте вывод скрипта в лог-файл, чтобы отслеживать историю выполнения и возможные ошибки.
  • Уведомления: Интегрируйте отправку email или сообщений в Telegram через API в случае успешного завершения или, наоборот, возникновения проблем.
  • Резервное копирование БД: Добавьте команды для дампа базы данных (например, с помощью mysqldump) и включения полученного файла в архив.

Заключение

Такой скрипт — это малобюджетное, но эффективное решение для автоматизации резервного копирования. Он наглядно демонстрирует мощь и простоту стандартных инструментов Linux. Не забывайте периодически проверять, что ваши бэкапы создаются корректно и их можно восстановить в случае необходимости.