Как настроить cron для ежедневного бэкапа на Linux: пошаговый гайд
Полное руководство по созданию ежедневных заданий cron для надёжного бэкапа
Введение
Потеря данных — одна из самых неприятных ситуаций для любого администратора или пользователя 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 — простой и надёжный способ защитить данные. Следуя шагам, вы создадите скрипт, настроите расписание, добавите ротацию и мониторинг. Не забывайте тестировать восстановление и адаптировать решение под свои нужды. Автоматизация избавит вас от рутины и снизит риски потери информации.
Читайте также
Комментарии
Комментарии доступны только зарегистрированным пользователям. Войти
- Пока нет комментариев. Будьте первым.



