nakama/CRON_SETUP.md

289 lines
8.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ⏰ Настройка автоматических бекапов через 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<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
```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`