Разберём пошаговую настройку автоматического резервного копирования мира Minecraft с использованием cron и rsync.
Шаг 1. Подготовка директорий
Создайте папку для бэкапов:
bash
sudo mkdir -p /backup/minecraft/worlds
Установите владельца (замените minecraft на пользователя, от которого запущен сервер):
bash
sudo chown -R minecraft:minecraft /backup/minecraft
Шаг 2. Создание скрипта бэкапа
- Создайте скрипт:
bash
sudo nano /usr/local/bin/minecraft-backup.sh
- Вставьте код:
bash
#!/bin/bash
# Настройки
SERVER_DIR="/opt/minecraft/server" # путь к серверу Minecraft
BACKUP_DIR="/backup/minecraft/worlds" # папка для бэкапов
WORLD_NAME="world" # название мира (может быть world, world_nether, world_the_end)
DATE=$(date +%Y%m%d_%H%M%S) # временная метка
BACKUP_FILE="$BACKUP_DIR/$WORLD_NAME-$DATE.tar.gz"
# Остановка сервера (опционально, но рекомендуется)
echo "Останов сервера для бэкапа..."
screen -S minecraft -p 0 -X stuff "say Резервное копирование...^M"
sleep 5
screen -S minecraft -p 0 -X stuff "stop^M"
sleep 30 # ожидание завершения сохранения
# Создание архива мира
echo "Создание бэкапа мира $WORLD_NAME..."
tar -czf "$BACKUP_FILE" -C "$SERVER_DIR" "$WORLD_NAME"
# Запуск сервера
echo "Запуск сервера..."
cd "$SERVER_DIR" && screen -dmS minecraft java -Xmx4G -jar server.jar nogui
# Уведомление в чат
sleep 10
screen -S minecraft -p 0 -X stuff "say Бэкап завершён: $DATE^M"
echo "Бэкап сохранён: $BACKUP_FILE"
- Сделайте скрипт исполняемым:
bash
sudo chmod +x /usr/local/bin/minecraft-backup.sh
Шаг 3. Настройка ротации бэкапов
Чтобы не заполнять диск старыми копиями, создайте скрипт ротации:
bash
sudo nano /usr/local/bin/backup-rotation.sh
Добавьте код:
bash
#!/bin/bash
BACKUP_DIR="/backup/minecraft/worlds"
RETENTION_DAYS=7 # хранить бэкапы 7 дней
# Удаление старых бэкапов
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete
echo "Ротация бэкапов завершена: $(date)"
Сделайте скрипт исполняемым:
bash
sudo chmod +x /usr/local/bin/backup-rotation.sh
Шаг 4. Использование rsync для инкрементальных копий
Если хотите экономить место и время, используйте rsync вместо полного архива каждый раз.
- Создайте скрипт инкрементального бэкапа:
bash
sudo nano /usr/local/bin/minecraft-incremental-backup.sh
- Добавьте код:
bash
#!/bin/bash
SERVER_DIR="/opt/minecraft/server"
SNAPSHOT_DIR="/backup/minecraft/snapshots"
WORLD_NAME="world"
DATE=$(date +%Y%m%d)
# Создание снапшота мира
rsync -av --delete \
--link-dest="$SNAPSHOT_DIR/latest" \
"$SERVER_DIR/$WORLD_NAME/" \
"$SNAPSHOT_DIR/$DATE/"
# Обновление ссылки на последний снапшот
rm -f "$SNAPSHOT_DIR/latest"
ln -s "$SNAPSHOT_DIR/$DATE" "$SNAPSHOT_DIR/latest"
echo "Инкрементальный бэкап завершён: $DATE"
- Сделайте исполняемым:
bash
sudo chmod +x /usr/local/bin/minecraft-incremental-backup.sh
Шаг 5. Настройка cron
- Откройте планировщик задач:
bash
sudo crontab -e
- Добавьте строки:
cron
# Полный бэкап каждый день в 3:00
0 3 * * * /usr/local/bin/minecraft-backup.sh
# Инкрементальный бэкап каждые 6 часов
0 */6 * * * /usr/local/bin/minecraft-incremental-backup.sh
# Ротация бэкапов каждый день в 4:00
0 4 * * * /usr/local/bin/backup-rotation.sh
Расшифровка расписания:
- 0 3 * * * — в 03:00 каждый день;
- 0 */6 * * * — каждые 6 часов (00:00, 06:00, 12:00, 18:00);
- 0 4 * * * — в 04:00 каждый день.
Шаг 6. Тестирование
- Запустите скрипт вручную:
bash
sudo /usr/local/bin/minecraft-backup.sh
- Проверьте, что архив появился в /backup/minecraft/worlds/.
- Убедитесь, что сервер корректно перезапустился.
- Проверьте ротацию:
bash
sudo /usr/local/bin/backup-rotation.sh
Убедитесь, что старые файлы удаляются.
Шаг 7. Дополнительные настройки (опционально)
Уведомления по email:
- Установите mailutils:
bash
sudo apt install mailutils
- Измените скрипт бэкапа, добавив в конец:
bash
echo "Бэкап мира Minecraft завершён успешно: $BACKUP_FILE" | mail -s "Minecraft Backup Success" admin@example.com
Удаленное копирование через rsync:
Если нужно сохранять бэкапы на другом сервере:
bash
rsync -avz --delete /backup/minecraft/ user@remote-server:/backup/minecraft/
Для этого настройте SSH‑ключи без пароля между серверами.
Чек‑лист проверки
- Сервер корректно останавливается перед бэкапом.
- Бэкап создаётся в указанной папке.
- Сервер автоматически запускается после бэкапа.
- Старые бэкапы удаляются по расписанию.
- Инкрементальные копии работают (если используете rsync).
- При ошибках скрипт логирует их (можно добавить >> /var/log/minecraft-backup.log 2>&1 в cron).
Устранение распространённых проблем
- «Сервер не останавливается»: проверьте имя сессии screen (screen -ls).
- «Нет прав на запись»: убедитесь, что папка /backup/minecraft принадлежит пользователю сервера.
- «rsync не создаёт ссылки»: проверьте, что --link-dest указывает на существующую папку.
- «cron не запускает скрипт»: добавьте полный путь к командам в скрипте (например, /bin/tar вместо tar).
- «Бэкап слишком большой»: используйте инкрементальные копии или архивируйте только изменённые файлы.
Рекомендации
- Частота: для активного сервера — каждые 6–12 часов; для спокойного — раз в сутки.
- Место хранения: используйте отдельный диск или сетевое хранилище.
- Проверка: раз в месяц проверяйте, что бэкап восстанавливается.
- Безопасность: шифруйте бэкапы (gpg), если они содержат конфиденциальные данные.
- Мониторинг: настройте логирование и оповещения о сбоях.
Теперь у вас есть полностью автоматизированная система резервного копирования Minecraft‑сервера. Если хотите, могу помочь адаптировать скрипты под вашу конфигурацию или разобрать какой‑то шаг подробнее!