8.4 KiB
⏰ Настройка автоматических бекапов через Cron
📋 Инструкция
1. Подключитесь к удаленному серверу
ssh root@103.80.87.247
2. Установите необходимые инструменты
# Убедитесь, что mongo-tools установлены
apt update
apt install -y mongodb-database-tools
3. Скопируйте скрипт бекапа на сервер
С вашего локального компьютера:
scp backup-cron.sh root@103.80.87.247:/usr/local/bin/
Или создайте файл напрямую на сервере:
nano /usr/local/bin/backup-cron.sh
# Вставьте содержимое из backup-cron.sh
4. Сделайте скрипт исполняемым
chmod +x /usr/local/bin/backup-cron.sh
5. Настройте cron
# Откройте crontab для редактирования
crontab -e
6. Добавьте задачи в crontab
Выберите один из вариантов:
Вариант 1: Еженедельные бекапы (воскресенье в 3:00 ночи)
# Еженедельный бекап базы данных Nakama
0 3 * * 0 /usr/local/bin/backup-cron.sh >> /var/log/nakama-backup.log 2>&1
Вариант 2: Ежедневные бекапы (каждый день в 3:00 ночи)
# Ежедневный бекап базы данных Nakama
0 3 * * * /usr/local/bin/backup-cron.sh >> /var/log/nakama-backup.log 2>&1
Вариант 3: Несколько бекапов в неделю (пн, ср, пт в 3:00)
# Бекапы по понедельникам, средам и пятницам
0 3 * * 1,3,5 /usr/local/bin/backup-cron.sh >> /var/log/nakama-backup.log 2>&1
7. Проверьте настройку cron
# Просмотреть текущие задачи cron
crontab -l
# Проверить статус службы cron
systemctl status cron
8. Тестирование
Запустите бекап вручную:
/usr/local/bin/backup-cron.sh
Проверьте созданные бекапы:
ls -lh /mnt/nakama-backups/
Просмотрите лог:
tail -50 /var/log/nakama-backup.log
📊 Синтаксис Cron
* * * * * команда
│ │ │ │ │
│ │ │ │ └─── День недели (0-7, где 0 и 7 = воскресенье)
│ │ │ └───── Месяц (1-12)
│ │ └─────── День месяца (1-31)
│ └───────── Час (0-23)
└─────────── Минута (0-59)
Примеры расписаний
| Расписание | Синтаксис Cron | Описание |
|---|---|---|
| Каждую минуту | * * * * * |
Выполняется каждую минуту |
| Каждый час | 0 * * * * |
Выполняется в начале каждого часа |
| Раз в день (в полночь) | 0 0 * * * |
Выполняется в 00:00 каждый день |
| Раз в день (в 3:00) | 0 3 * * * |
Выполняется в 03:00 каждый день |
| Раз в неделю (воскресенье) | 0 3 * * 0 |
Выполняется в воскресенье в 03:00 |
| Раз в месяц | 0 0 1 * * |
Выполняется 1-го числа каждого месяца в 00:00 |
| Каждые 6 часов | 0 */6 * * * |
Выполняется в 00:00, 06:00, 12:00, 18:00 |
| Рабочие дни в 9:00 | 0 9 * * 1-5 |
Выполняется пн-пт в 09:00 |
🔧 Настройка уведомлений (опционально)
Чтобы получать уведомления о статусе бекапов в Telegram:
1. Создайте бота для уведомлений
- Напишите @BotFather в Telegram
- Отправьте команду
/newbot - Следуйте инструкциям
- Скопируйте токен бота
2. Получите свой Chat ID
- Напишите боту @userinfobot
- Скопируйте свой Chat ID
3. Обновите скрипт бекапа
Откройте /usr/local/bin/backup-cron.sh и раскомментируйте последние строки:
# В конце скрипта найдите и раскомментируйте:
curl -X POST "https://api.telegram.org/bot<YOUR_BOT_TOKEN>/sendMessage" \
-d "chat_id=<YOUR_CHAT_ID>" \
-d "text=✅ Резервная копия Nakama успешно создана: ${BACKUP_NAME}.tar.gz (${BACKUP_SIZE})"
Замените:
<YOUR_BOT_TOKEN>на токен вашего бота<YOUR_CHAT_ID>на ваш Chat ID
📝 Полезные команды
Управление cron
# Открыть crontab для редактирования
crontab -e
# Показать текущие задачи
crontab -l
# Удалить все задачи
crontab -r
# Открыть crontab другого пользователя (требуются права root)
crontab -u username -e
Просмотр логов
# Показать последние 50 строк лога бекапов
tail -50 /var/log/nakama-backup.log
# Следить за логом в реальном времени
tail -f /var/log/nakama-backup.log
# Показать все ошибки в логе
grep -i error /var/log/nakama-backup.log
# Показать системный лог cron
grep CRON /var/log/syslog
Управление бекапами
# Список всех бекапов
ls -lht /mnt/nakama-backups/
# Размер директории с бекапами
du -sh /mnt/nakama-backups/
# Удалить бекапы старше 30 дней
find /mnt/nakama-backups/ -name "nakama_backup_*.tar.gz" -type f -mtime +30 -delete
# Подсчитать количество бекапов
ls -1 /mnt/nakama-backups/ | wc -l
⚠️ Важные замечания
-
Время выполнения: Убедитесь, что время в cron указано в часовом поясе сервера. Проверьте:
timedatectl -
Права доступа: Убедитесь, что у пользователя, под которым запускается cron, есть права на запись в директорию бекапов.
-
Место на диске: Регулярно проверяйте свободное место:
df -h /mnt/nakama-backups/ -
Ротация логов: Настройте logrotate для
/var/log/nakama-backup.log:nano /etc/logrotate.d/nakama-backupДобавьте:
/var/log/nakama-backup.log { weekly rotate 4 compress missingok notifempty } -
Мониторинг: Регулярно проверяйте, что бекапы создаются успешно:
ls -lt /mnt/nakama-backups/ | head
🔄 Восстановление из бекапа
Если понадобится восстановить базу данных:
# 1. Перейти в директорию с бекапами
cd /mnt/nakama-backups/
# 2. Найти нужный бекап
ls -lt | grep nakama_backup
# 3. Распаковать бекап
tar -xzf nakama_backup_YYYY-MM-DD_HH-MM-SS.tar.gz
# 4. Восстановить базу данных
mongorestore --uri="mongodb://localhost:27017" \
--drop \
--gzip \
--db nakama \
nakama_backup_YYYY-MM-DD_HH-MM-SS/nakama/
# 5. Удалить распакованную директорию
rm -rf nakama_backup_YYYY-MM-DD_HH-MM-SS/
📞 Помощь
Если у вас возникли проблемы с настройкой cron:
- Проверьте логи:
tail -f /var/log/nakama-backup.log - Проверьте системный лог:
grep CRON /var/log/syslog - Убедитесь, что cron запущен:
systemctl status cron - Запустите скрипт вручную для отладки:
/usr/local/bin/backup-cron.sh