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