nakama/CRON_SETUP.md

289 lines
8.4 KiB
Markdown
Raw Normal View History

2025-11-20 21:32:48 +00:00
# ⏰ Настройка автоматических бекапов через 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`