nakama/CRON_SETUP.md

8.4 KiB
Raw Blame History

Настройка автоматических бекапов через 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. Создайте бота для уведомлений

  1. Напишите @BotFather в Telegram
  2. Отправьте команду /newbot
  3. Следуйте инструкциям
  4. Скопируйте токен бота

2. Получите свой Chat ID

  1. Напишите боту @userinfobot
  2. Скопируйте свой 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

⚠️ Важные замечания

  1. Время выполнения: Убедитесь, что время в cron указано в часовом поясе сервера. Проверьте:

    timedatectl
    
  2. Права доступа: Убедитесь, что у пользователя, под которым запускается cron, есть права на запись в директорию бекапов.

  3. Место на диске: Регулярно проверяйте свободное место:

    df -h /mnt/nakama-backups/
    
  4. Ротация логов: Настройте logrotate для /var/log/nakama-backup.log:

    nano /etc/logrotate.d/nakama-backup
    

    Добавьте:

    /var/log/nakama-backup.log {
        weekly
        rotate 4
        compress
        missingok
        notifempty
    }
    
  5. Мониторинг: Регулярно проверяйте, что бекапы создаются успешно:

    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:

  1. Проверьте логи: tail -f /var/log/nakama-backup.log
  2. Проверьте системный лог: grep CRON /var/log/syslog
  3. Убедитесь, что cron запущен: systemctl status cron
  4. Запустите скрипт вручную для отладки: /usr/local/bin/backup-cron.sh