# ⏰ Настройка автоматических бекапов через Cron ## 📋 Инструкция ### 1. Подключитесь к удаленному серверу ```bash ssh root@103.80.87.247 ``` ### 2. Установите необходимые инструменты ```bash # Убедитесь, что mongo-tools установлены apt update apt install -y mongodb-database-tools ``` ### 3. Скопируйте скрипт бекапа на сервер С вашего локального компьютера: ```bash scp backup-cron.sh root@103.80.87.247:/usr/local/bin/ ``` Или создайте файл напрямую на сервере: ```bash nano /usr/local/bin/backup-cron.sh # Вставьте содержимое из backup-cron.sh ``` ### 4. Сделайте скрипт исполняемым ```bash chmod +x /usr/local/bin/backup-cron.sh ``` ### 5. Настройте cron ```bash # Откройте crontab для редактирования crontab -e ``` ### 6. Добавьте задачи в crontab Выберите один из вариантов: #### Вариант 1: Еженедельные бекапы (воскресенье в 3:00 ночи) ```cron # Еженедельный бекап базы данных Nakama 0 3 * * 0 /usr/local/bin/backup-cron.sh >> /var/log/nakama-backup.log 2>&1 ``` #### Вариант 2: Ежедневные бекапы (каждый день в 3:00 ночи) ```cron # Ежедневный бекап базы данных Nakama 0 3 * * * /usr/local/bin/backup-cron.sh >> /var/log/nakama-backup.log 2>&1 ``` #### Вариант 3: Несколько бекапов в неделю (пн, ср, пт в 3:00) ```cron # Бекапы по понедельникам, средам и пятницам 0 3 * * 1,3,5 /usr/local/bin/backup-cron.sh >> /var/log/nakama-backup.log 2>&1 ``` ### 7. Проверьте настройку cron ```bash # Просмотреть текущие задачи cron crontab -l # Проверить статус службы cron systemctl status cron ``` ### 8. Тестирование Запустите бекап вручную: ```bash /usr/local/bin/backup-cron.sh ``` Проверьте созданные бекапы: ```bash ls -lh /mnt/nakama-backups/ ``` Просмотрите лог: ```bash 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](https://t.me/BotFather) в Telegram 2. Отправьте команду `/newbot` 3. Следуйте инструкциям 4. Скопируйте токен бота ### 2. Получите свой Chat ID 1. Напишите боту [@userinfobot](https://t.me/userinfobot) 2. Скопируйте свой Chat ID ### 3. Обновите скрипт бекапа Откройте `/usr/local/bin/backup-cron.sh` и раскомментируйте последние строки: ```bash # В конце скрипта найдите и раскомментируйте: curl -X POST "https://api.telegram.org/bot/sendMessage" \ -d "chat_id=" \ -d "text=✅ Резервная копия Nakama успешно создана: ${BACKUP_NAME}.tar.gz (${BACKUP_SIZE})" ``` Замените: - `` на токен вашего бота - `` на ваш Chat ID --- ## 📝 Полезные команды ### Управление cron ```bash # Открыть crontab для редактирования crontab -e # Показать текущие задачи crontab -l # Удалить все задачи crontab -r # Открыть crontab другого пользователя (требуются права root) crontab -u username -e ``` ### Просмотр логов ```bash # Показать последние 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 ``` ### Управление бекапами ```bash # Список всех бекапов 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 указано в часовом поясе сервера. Проверьте: ```bash timedatectl ``` 2. **Права доступа**: Убедитесь, что у пользователя, под которым запускается cron, есть права на запись в директорию бекапов. 3. **Место на диске**: Регулярно проверяйте свободное место: ```bash df -h /mnt/nakama-backups/ ``` 4. **Ротация логов**: Настройте logrotate для `/var/log/nakama-backup.log`: ```bash nano /etc/logrotate.d/nakama-backup ``` Добавьте: ``` /var/log/nakama-backup.log { weekly rotate 4 compress missingok notifempty } ``` 5. **Мониторинг**: Регулярно проверяйте, что бекапы создаются успешно: ```bash ls -lt /mnt/nakama-backups/ | head ``` --- ## 🔄 Восстановление из бекапа Если понадобится восстановить базу данных: ```bash # 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`