sadrix logoSadriX
Минцифры готовит обязательную регистрацию IMEI смартфонов, купленных за границей
Гайды

Как настроить cron для ежедневного бэкапа на Linux: пошаговый гайд

Полное руководство по созданию ежедневных заданий cron для надёжного бэкапа

09 476 просмотров4 мин
0
Поделиться:TelegramVK

Введение

Потеря данных — одна из самых неприятных ситуаций для любого администратора или пользователя Linux. Регулярное резервное копирование помогает избежать катастрофы, но делать его вручную каждый день неудобно и легко забыть. Cron — классический планировщик задач в Unix-подобных системах, который позволяет автоматизировать этот процесс. В этом руководстве мы разберём, как настроить ежедневный бэкап с помощью cron, какие инструменты использовать и как убедиться, что всё работает.

Требования

  • Linux-сервер или рабочая станция (подойдут Debian, Ubuntu, CentOS, RHEL, Fedora и другие).

  • Права root или пользователя с sudo.

  • Базовые навыки работы в терминале.

  • Свободное место на диске для хранения резервных копий.

  • Установленные утилиты: rsync, tar, gzip (обычно уже есть). Для шифрования может понадобиться gpg.

Шаг 1: Проверка работы cron

Cron обычно предустановлен. Убедитесь, что служба запущена и активна:

systemctl status cron

В системах на базе Red Hat служба может называться crond:

systemctl status crond

Если служба не запущена, включите и запустите её:

sudo systemctl enable --now cron

Шаг 2: Выбор стратегии резервного копирования

Прежде чем писать скрипт, определитесь:

  • Что копировать: домашние каталоги, конфиги, базы данных, веб-сайты.

  • Куда копировать: локальный диск, внешний USB, сетевой ресурс (NFS, SMB), облако.

  • Как часто: ежедневно, как в нашем случае.

  • Глубина хранения: сколько дней/недель хранить старые копии.

Для примера будем создавать ежедневный архив каталога /home и /etc в /backup с ротацией за 7 дней.

Шаг 3: Создание скрипта бэкапа

Создайте каталог для скриптов и логов:

sudo mkdir -p /opt/backup /var/log/backup

Создайте файл скрипта /opt/backup/daily_backup.sh:

sudo nano /opt/backup/daily_backup.sh

Вставьте следующий код (адаптируйте под свои пути):

#!/bin/bash

# Каталог для хранения бэкапов
BACKUP_DIR="/backup"
# Имя архива с датой
DATE=$(date +%Y-%m-%d_%H-%M-%S)
ARCHIVE="$BACKUP_DIR/backup_$DATE.tar.gz"
# Что копируем
SOURCE="/home /etc"
# Лог-файл
LOG="/var/log/backup/backup.log"

# Создаём каталог, если его нет
mkdir -p "$BACKUP_DIR"

# Записываем начало
еcho "===== Начало бэкапа: $(date) =====" >> "$LOG"

# Создаём архив с исключением временных файлов
tar -czpf "$ARCHIVE" --exclude='*.tmp' --exclude='.cache' $SOURCE >> "$LOG" 2>&1

# Проверяем успешность
if [ $? -eq 0 ]; then
    echo "Бэкап успешно создан: $ARCHIVE" >> "$LOG"
else
    echo "ОШИБКА при создании бэкапа!" >> "$LOG"
    exit 1
fi

# Удаляем архивы старше 7 дней
find "$BACKUP_DIR" -name "backup_*.tar.gz" -type f -mtime +7 -delete >> "$LOG" 2>&1

echo "===== Завершено: $(date) =====" >> "$LOG"

Сделайте скрипт исполняемым:

sudo chmod +x /opt/backup/daily_backup.sh

Шаг 4: Тестовый запуск скрипта

Перед добавлением в cron запустите скрипт вручную:

sudo /opt/backup/daily_backup.sh

Проверьте, создался ли архив в /backup и что пишется в лог:

tail -f /var/log/backup/backup.log

Убедитесь, что архив не пустой и содержит нужные файлы:

tar -tzf /backup/backup_*.tar.gz | head

Шаг 5: Настройка задания в cron

Откройте crontab для root (так как скрипт требует прав на чтение всех файлов):

sudo crontab -e

Добавьте строку для ежедневного запуска в 3:00 ночи:

0 3 * * * /opt/backup/daily_backup.sh >/dev/null 2>&1

Сохраните и выйдите. Проверьте, что задание добавлено:

sudo crontab -l

Шаг 6: Понимание синтаксиса cron

Формат строки cron: минута час день_месяца месяц день_недели команда.

Примеры:

  • 0 3 * * * — каждый день в 3:00.

  • 30 2 * * 1 — каждый понедельник в 2:30.

  • 0 */6 * * * — каждые 6 часов.

Специальные строки: @daily, @weekly, @monthly, @reboot.

Шаг 7: Использование rsync для инкрементных бэкапов

Если нужно копировать только изменения, используйте rsync. Пример скрипта:

#!/bin/bash
SOURCE="/home/"
DEST="/backup/rsync/"
LOG="/var/log/backup/rsync.log"

mkdir -p "$DEST"
rsync -avz --delete --exclude='.cache' "$SOURCE" "$DEST" >> "$LOG" 2>&1

Такой подход экономит место и время, но не создаёт архивных копий. Для истории можно комбинировать с --link-dest.

Шаг 8: Шифрование бэкапов

Если данные конфиденциальны, шифруйте архивы с помощью GPG:

gpg --symmetric --cipher-algo AES256 -o "$ARCHIVE.gpg" "$ARCHIVE"
rm "$ARCHIVE"

Пароль можно хранить в защищённом файле или вводить интерактивно (не подходит для cron). Используйте --passphrase-file с ограниченными правами.

Шаг 9: Отправка бэкапов на удалённый сервер

Для надёжности храните копии вне основного сервера. Настройте SSH-ключи и используйте scp или rsync:

rsync -avz -e ssh /backup/ user@remote:/backup/

Добавьте эту команду в конец скрипта. Убедитесь, что SSH-ключ не требует пароля.

Шаг 10: Мониторинг и уведомления

Cron может отправлять вывод на email. Установите mailutils или postfix и добавьте в crontab переменную MAILTO:

MAILTO="admin@example.com"
0 3 * * * /opt/backup/daily_backup.sh

Либо используйте curl для отправки уведомлений в Telegram/Slack.

Шаг 11: Проверка целостности бэкапов

Регулярно проверяйте архивы:

tar -tzf /backup/backup_2025-01-01_03-00-00.tar.gz > /dev/null && echo "OK"

Для rsync-копий можно сравнивать контрольные суммы.

Шаг 12: Восстановление из бэкапа

Процесс восстановления зависит от типа копии. Для tar-архива:

tar -xzf /backup/backup_2025-01-01_03-00-00.tar.gz -C /

Для rsync просто скопируйте файлы обратно. Всегда тестируйте восстановление на отдельном каталоге.

Типичные ошибки

1. Неверные пути в скрипте. Cron запускает задания с минимальным окружением, поэтому используйте абсолютные пути. 2. Отсутствие прав. Если скрипт запускается от пользователя, он может не иметь доступа к системным каталогам. Запускайте от root через sudo crontab -e. 3. Забыли сделать скрипт исполняемым. chmod +x обязателен. 4. Нет ротации. Без удаления старых архивов диск переполнится. 5. Игнорирование логов. Без логирования сложно понять, почему бэкап не создался. 6. Слишком частый запуск. Ежедневный бэкап больших объёмов может занимать часы; убедитесь, что он успевает завершиться до следующего. 7. Отсутствие проверки. Регулярно проверяйте целостность и возможность восстановления.

FAQ

Вопрос: Можно ли запускать cron от обычного пользователя? Ответ: Да, если у него есть доступ к нужным файлам. Используйте crontab -e без sudo.

Вопрос: Как изменить время запуска? Ответ: Отредактируйте crontab и укажите другое время в первых пяти полях.

Вопрос: Что делать, если cron не запускает скрипт? Ответ: Проверьте логи /var/log/syslog или /var/log/cron, убедитесь в правильности путей и прав.

Вопрос: Как хранить бэкапы в облаке? Ответ: Используйте rclone, aws-cli или s3cmd в скрипте после создания архива.

Вопрос: Нужно ли останавливать сервисы перед бэкапом? Ответ: Для баз данных — да, иначе копия может быть несогласованной. Используйте дампы (mysqldump, pg_dump).

Итог

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

Читайте также

Комментарии

Комментарии доступны только зарегистрированным пользователям. Войти

  • Пока нет комментариев. Будьте первым.