Настройка автоматических бэкапов Minecraft — различия между версиями
Admin (обсуждение | вклад) (Новая страница: «= Настройка автоматических бэкапов Minecraft = == 1. Подготовка системы == * Войдите в систему п…») |
Admin (обсуждение | вклад) |
||
Строка 7: | Строка 7: | ||
* Рекомендуется использовать Ubuntu 24.04 LTS для стабильной работы. | * Рекомендуется использовать Ubuntu 24.04 LTS для стабильной работы. | ||
− | == 2. Установка необходимых пакетов | + | == 2. Установка необходимых пакетов == |
=== Обновление системы === | === Обновление системы === | ||
1. Обновите систему: | 1. Обновите систему: | ||
− | < | + | <pre>sudo apt update</pre> |
− | < | + | <pre>sudo apt upgrade -y</pre> |
2. Установите необходимые пакеты: | 2. Установите необходимые пакеты: | ||
− | < | + | <pre>sudo apt install -y rsync tar gzip zip unzip cron mailutils</pre> |
=== Настройка cron === | === Настройка cron === | ||
1. Убедитесь, что cron запущен: | 1. Убедитесь, что cron запущен: | ||
− | < | + | <pre>sudo systemctl start cron</pre> |
− | < | + | <pre>sudo systemctl enable cron</pre> |
2. Проверьте статус: | 2. Проверьте статус: | ||
− | < | + | <pre>sudo systemctl status cron</pre> |
− | == 3. Создание структуры бэкапов | + | == 3. Создание структуры бэкапов == |
=== Создание директорий === | === Создание директорий === | ||
1. Создайте основную директорию для бэкапов: | 1. Создайте основную директорию для бэкапов: | ||
− | < | + | <pre>sudo mkdir -p /backup/minecraft</pre> |
2. Создайте поддиректории: | 2. Создайте поддиректории: | ||
− | < | + | <pre>sudo mkdir -p /backup/minecraft/worlds</pre> |
− | < | + | <pre>sudo mkdir -p /backup/minecraft/plugins</pre> |
− | < | + | <pre>sudo mkdir -p /backup/minecraft/configs</pre> |
− | < | + | <pre>sudo mkdir -p /backup/minecraft/logs</pre> |
3. Установите права доступа: | 3. Установите права доступа: | ||
− | < | + | <pre>sudo chown -R minecraft:minecraft /backup/minecraft</pre> |
− | < | + | <pre>sudo chmod -R 755 /backup/minecraft</pre> |
=== Настройка ротации бэкапов === | === Настройка ротации бэкапов === | ||
1. Создайте скрипт ротации: | 1. Создайте скрипт ротации: | ||
− | < | + | <pre>sudo nano /usr/local/bin/backup-rotation.sh</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>\#!/bin/bash |
BACKUP_DIR="/backup/minecraft" | BACKUP_DIR="/backup/minecraft" | ||
RETENTION_DAYS=7 | RETENTION_DAYS=7 | ||
− | # Удаление старых бэкапов | + | \# Удаление старых бэкапов |
find $BACKUP_DIR -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete | find $BACKUP_DIR -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete | ||
find $BACKUP_DIR -name "*.zip" -mtime +$RETENTION_DAYS -delete | find $BACKUP_DIR -name "*.zip" -mtime +$RETENTION_DAYS -delete | ||
− | # Удаление пустых директорий | + | \# Удаление пустых директорий |
find $BACKUP_DIR -type d -empty -delete | find $BACKUP_DIR -type d -empty -delete | ||
echo "Backup rotation completed: $(date)" | echo "Backup rotation completed: $(date)" | ||
− | </ | + | </pre> |
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | < | + | <pre>sudo chmod +x /usr/local/bin/backup-rotation.sh</pre> |
− | == 4. Создание скрипта бэкапа | + | == 4. Создание скрипта бэкапа == |
=== Базовый скрипт бэкапа === | === Базовый скрипт бэкапа === | ||
1. Создайте основной скрипт бэкапа: | 1. Создайте основной скрипт бэкапа: | ||
− | < | + | <pre>sudo nano /usr/local/bin/minecraft-backup.sh</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>\#!/bin/bash |
− | # Настройки бэкапа | + | \# Настройки бэкапа |
BACKUP_DIR="/backup/minecraft" | BACKUP_DIR="/backup/minecraft" | ||
SERVER_DIR="/opt/minecraft" | SERVER_DIR="/opt/minecraft" | ||
Строка 84: | Строка 84: | ||
LOG_FILE="/var/log/minecraft-backup.log" | LOG_FILE="/var/log/minecraft-backup.log" | ||
− | # Функция логирования | + | \# Функция логирования |
log_message() { | log_message() { | ||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE | echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE | ||
} | } | ||
− | # Проверка доступности сервера | + | \# Проверка доступности сервера |
if [ ! -d "$SERVER_DIR" ]; then | if [ ! -d "$SERVER_DIR" ]; then | ||
log_message "ERROR: Server directory not found: $SERVER_DIR" | log_message "ERROR: Server directory not found: $SERVER_DIR" | ||
Строка 97: | Строка 97: | ||
log_message "Starting Minecraft backup..." | log_message "Starting Minecraft backup..." | ||
− | # Создание директории для бэкапа | + | \# Создание директории для бэкапа |
mkdir -p $BACKUP_DIR/$DATE | mkdir -p $BACKUP_DIR/$DATE | ||
− | # Остановка сервера для бэкапа | + | \# Остановка сервера для бэкапа |
log_message "Stopping Minecraft server..." | log_message "Stopping Minecraft server..." | ||
systemctl stop minecraft-spigot 2>/dev/null || true | systemctl stop minecraft-spigot 2>/dev/null || true | ||
Строка 106: | Строка 106: | ||
systemctl stop minecraft-bukkit 2>/dev/null || true | systemctl stop minecraft-bukkit 2>/dev/null || true | ||
− | # Ожидание полной остановки | + | \# Ожидание полной остановки |
sleep 10 | sleep 10 | ||
− | # Создание архива мира | + | \# Создание архива мира |
log_message "Backing up world data..." | log_message "Backing up world data..." | ||
if [ -d "$SERVER_DIR/world" ]; then | if [ -d "$SERVER_DIR/world" ]; then | ||
Строка 116: | Строка 116: | ||
fi | fi | ||
− | # Создание архива плагинов | + | \# Создание архива плагинов |
log_message "Backing up plugins..." | log_message "Backing up plugins..." | ||
if [ -d "$SERVER_DIR/plugins" ]; then | if [ -d "$SERVER_DIR/plugins" ]; then | ||
Строка 123: | Строка 123: | ||
fi | fi | ||
− | # Создание архива конфигурации | + | \# Создание архива конфигурации |
log_message "Backing up configuration..." | log_message "Backing up configuration..." | ||
tar -czf $BACKUP_DIR/$DATE/config-$DATE.tar.gz -C $SERVER_DIR server.properties bukkit.yml spigot.yml paper-global.yml 2>/dev/null || true | tar -czf $BACKUP_DIR/$DATE/config-$DATE.tar.gz -C $SERVER_DIR server.properties bukkit.yml spigot.yml paper-global.yml 2>/dev/null || true | ||
log_message "Configuration backup completed" | log_message "Configuration backup completed" | ||
− | # Создание архива логов | + | \# Создание архива логов |
log_message "Backing up logs..." | log_message "Backing up logs..." | ||
if [ -d "$SERVER_DIR/logs" ]; then | if [ -d "$SERVER_DIR/logs" ]; then | ||
Строка 135: | Строка 135: | ||
fi | fi | ||
− | # Создание полного архива | + | \# Создание полного архива |
log_message "Creating full backup archive..." | log_message "Creating full backup archive..." | ||
tar -czf $BACKUP_DIR/minecraft-full-backup-$DATE.tar.gz -C $BACKUP_DIR $DATE | tar -czf $BACKUP_DIR/minecraft-full-backup-$DATE.tar.gz -C $BACKUP_DIR $DATE | ||
log_message "Full backup archive created" | log_message "Full backup archive created" | ||
− | # Удаление временной директории | + | \# Удаление временной директории |
rm -rf $BACKUP_DIR/$DATE | rm -rf $BACKUP_DIR/$DATE | ||
− | # Запуск сервера | + | \# Запуск сервера |
log_message "Starting Minecraft server..." | log_message "Starting Minecraft server..." | ||
systemctl start minecraft-spigot 2>/dev/null || systemctl start minecraft-paper 2>/dev/null || systemctl start minecraft-bukkit 2>/dev/null || true | systemctl start minecraft-spigot 2>/dev/null || systemctl start minecraft-paper 2>/dev/null || systemctl start minecraft-bukkit 2>/dev/null || true | ||
log_message "Minecraft backup completed successfully" | log_message "Minecraft backup completed successfully" | ||
− | </ | + | </pre> |
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | < | + | <pre>sudo chmod +x /usr/local/bin/minecraft-backup.sh</pre> |
− | == 5. Настройка инкрементальных бэкапов | + | == 5. Настройка инкрементальных бэкапов == |
=== Создание скрипта инкрементального бэкапа === | === Создание скрипта инкрементального бэкапа === | ||
1. Создайте скрипт инкрементального бэкапа: | 1. Создайте скрипт инкрементального бэкапа: | ||
− | < | + | <pre>sudo nano /usr/local/bin/minecraft-incremental-backup.sh</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>\#!/bin/bash |
− | # Настройки инкрементального бэкапа | + | \# Настройки инкрементального бэкапа |
BACKUP_DIR="/backup/minecraft" | BACKUP_DIR="/backup/minecraft" | ||
SERVER_DIR="/opt/minecraft" | SERVER_DIR="/opt/minecraft" | ||
Строка 170: | Строка 170: | ||
SNAPSHOT_DIR="$BACKUP_DIR/snapshots" | SNAPSHOT_DIR="$BACKUP_DIR/snapshots" | ||
− | # Функция логирования | + | \# Функция логирования |
log_message() { | log_message() { | ||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE | echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE | ||
} | } | ||
− | # Создание директории для снапшотов | + | \# Создание директории для снапшотов |
mkdir -p $SNAPSHOT_DIR | mkdir -p $SNAPSHOT_DIR | ||
log_message "Starting incremental backup..." | log_message "Starting incremental backup..." | ||
− | # Создание снапшота мира | + | \# Создание снапшота мира |
if [ -d "$SERVER_DIR/world" ]; then | if [ -d "$SERVER_DIR/world" ]; then | ||
rsync -av --delete --link-dest=$SNAPSHOT_DIR/latest $SERVER_DIR/world/ $SNAPSHOT_DIR/world-$DATE/ | rsync -av --delete --link-dest=$SNAPSHOT_DIR/latest $SERVER_DIR/world/ $SNAPSHOT_DIR/world-$DATE/ | ||
Строка 187: | Строка 187: | ||
fi | fi | ||
− | # Создание снапшота плагинов | + | \# Создание снапшота плагинов |
if [ -d "$SERVER_DIR/plugins" ]; then | if [ -d "$SERVER_DIR/plugins" ]; then | ||
rsync -av --delete --link-dest=$SNAPSHOT_DIR/plugins-latest $SERVER_DIR/plugins/ $SNAPSHOT_DIR/plugins-$DATE/ | rsync -av --delete --link-dest=$SNAPSHOT_DIR/plugins-latest $SERVER_DIR/plugins/ $SNAPSHOT_DIR/plugins-$DATE/ | ||
Строка 195: | Строка 195: | ||
log_message "Incremental backup completed successfully" | log_message "Incremental backup completed successfully" | ||
− | </ | + | </pre> |
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | < | + | <pre>sudo chmod +x /usr/local/bin/minecraft-incremental-backup.sh</pre> |
− | == 6. Настройка удаленных бэкапов | + | == 6. Настройка удаленных бэкапов == |
=== Установка rsync === | === Установка rsync === | ||
1. Убедитесь, что rsync установлен: | 1. Убедитесь, что rsync установлен: | ||
− | < | + | <pre>sudo apt install -y rsync</pre> |
=== Создание скрипта удаленного бэкапа === | === Создание скрипта удаленного бэкапа === | ||
1. Создайте скрипт удаленного бэкапа: | 1. Создайте скрипт удаленного бэкапа: | ||
− | < | + | <pre>sudo nano /usr/local/bin/minecraft-remote-backup.sh</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>\#!/bin/bash |
− | # Настройки удаленного бэкапа | + | \# Настройки удаленного бэкапа |
BACKUP_DIR="/backup/minecraft" | BACKUP_DIR="/backup/minecraft" | ||
REMOTE_HOST="backup.example.com" | REMOTE_HOST="backup.example.com" | ||
Строка 223: | Строка 223: | ||
LOG_FILE="/var/log/minecraft-remote-backup.log" | LOG_FILE="/var/log/minecraft-remote-backup.log" | ||
− | # Функция логирования | + | \# Функция логирования |
log_message() { | log_message() { | ||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE | echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE | ||
Строка 230: | Строка 230: | ||
log_message "Starting remote backup..." | log_message "Starting remote backup..." | ||
− | # Синхронизация с удаленным сервером | + | \# Синхронизация с удаленным сервером |
rsync -avz --delete --progress $BACKUP_DIR/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/ | rsync -avz --delete --progress $BACKUP_DIR/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/ | ||
Строка 239: | Строка 239: | ||
exit 1 | exit 1 | ||
fi | fi | ||
− | </ | + | </pre> |
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | < | + | <pre>sudo chmod +x /usr/local/bin/minecraft-remote-backup.sh</pre> |
=== Настройка SSH ключей === | === Настройка SSH ключей === | ||
1. Создайте SSH ключ для бэкапа: | 1. Создайте SSH ключ для бэкапа: | ||
− | < | + | <pre>sudo -u minecraft ssh-keygen -t rsa -b 4096 -f /home/minecraft/.ssh/backup_key -N ""</pre> |
2. Скопируйте публичный ключ на удаленный сервер: | 2. Скопируйте публичный ключ на удаленный сервер: | ||
− | < | + | <pre>sudo -u minecraft ssh-copy-id -i /home/minecraft/.ssh/backup_key.pub backup@backup.example.com</pre> |
− | == 7. Настройка расписания бэкапов | + | == 7. Настройка расписания бэкапов == |
=== Настройка cron === | === Настройка cron === | ||
1. Отредактируйте crontab: | 1. Отредактируйте crontab: | ||
− | < | + | <pre>sudo crontab -e</pre> |
2. Добавьте задачи бэкапа: | 2. Добавьте задачи бэкапа: | ||
− | < | + | <pre>\# Minecraft backups |
− | # Полный бэкап каждый день в 3:00 | + | \# Полный бэкап каждый день в 3:00 |
0 3 * * * /usr/local/bin/minecraft-backup.sh | 0 3 * * * /usr/local/bin/minecraft-backup.sh | ||
− | # Инкрементальный бэкап каждые 6 часов | + | \# Инкрементальный бэкап каждые 6 часов |
0 */6 * * * /usr/local/bin/minecraft-incremental-backup.sh | 0 */6 * * * /usr/local/bin/minecraft-incremental-backup.sh | ||
− | # Удаленный бэкап каждый день в 4:00 | + | \# Удаленный бэкап каждый день в 4:00 |
0 4 * * * /usr/local/bin/minecraft-remote-backup.sh | 0 4 * * * /usr/local/bin/minecraft-remote-backup.sh | ||
− | # Ротация бэкапов каждый день в 5:00 | + | \# Ротация бэкапов каждый день в 5:00 |
0 5 * * * /usr/local/bin/backup-rotation.sh | 0 5 * * * /usr/local/bin/backup-rotation.sh | ||
− | </ | + | </pre> |
=== Настройка уведомлений === | === Настройка уведомлений === | ||
1. Создайте скрипт уведомлений: | 1. Создайте скрипт уведомлений: | ||
− | < | + | <pre>sudo nano /usr/local/bin/backup-notification.sh</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>\#!/bin/bash |
− | # Настройки уведомлений | + | \# Настройки уведомлений |
EMAIL="admin@example.com" | EMAIL="admin@example.com" | ||
LOG_FILE="/var/log/minecraft-backup.log" | LOG_FILE="/var/log/minecraft-backup.log" | ||
− | # Проверка последнего бэкапа | + | \# Проверка последнего бэкапа |
LAST_BACKUP=$(tail -1 $LOG_FILE | grep "completed successfully") | LAST_BACKUP=$(tail -1 $LOG_FILE | grep "completed successfully") | ||
Строка 292: | Строка 292: | ||
echo "Minecraft backup may have failed. Check logs: $LOG_FILE" | mail -s "Minecraft Backup Alert" $EMAIL | echo "Minecraft backup may have failed. Check logs: $LOG_FILE" | mail -s "Minecraft Backup Alert" $EMAIL | ||
fi | fi | ||
− | </ | + | </pre> |
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | < | + | <pre>sudo chmod +x /usr/local/bin/backup-notification.sh</pre> |
4. Добавьте в crontab: | 4. Добавьте в crontab: | ||
− | < | + | <pre>0 6 * * * /usr/local/bin/backup-notification.sh</pre> |
− | == 8. Мониторинг бэкапов | + | == 8. Мониторинг бэкапов == |
=== Создание скрипта мониторинга === | === Создание скрипта мониторинга === | ||
1. Создайте скрипт мониторинга: | 1. Создайте скрипт мониторинга: | ||
− | < | + | <pre>sudo nano /usr/local/bin/backup-monitor.sh</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>\#!/bin/bash |
− | # Мониторинг бэкапов | + | \# Мониторинг бэкапов |
BACKUP_DIR="/backup/minecraft" | BACKUP_DIR="/backup/minecraft" | ||
LOG_FILE="/var/log/backup-monitor.log" | LOG_FILE="/var/log/backup-monitor.log" | ||
− | # Проверка размера бэкапов | + | \# Проверка размера бэкапов |
BACKUP_SIZE=$(du -sh $BACKUP_DIR | awk '{print $1}') | BACKUP_SIZE=$(du -sh $BACKUP_DIR | awk '{print $1}') | ||
echo "[$(date)] Backup size: $BACKUP_SIZE" >> $LOG_FILE | echo "[$(date)] Backup size: $BACKUP_SIZE" >> $LOG_FILE | ||
− | # Проверка количества бэкапов | + | \# Проверка количества бэкапов |
BACKUP_COUNT=$(find $BACKUP_DIR -name "*.tar.gz" | wc -l) | BACKUP_COUNT=$(find $BACKUP_DIR -name "*.tar.gz" | wc -l) | ||
echo "[$(date)] Backup count: $BACKUP_COUNT" >> $LOG_FILE | echo "[$(date)] Backup count: $BACKUP_COUNT" >> $LOG_FILE | ||
− | # Проверка последнего бэкапа | + | \# Проверка последнего бэкапа |
LAST_BACKUP=$(find $BACKUP_DIR -name "*.tar.gz" -type f -printf '%T@ %p\n' | sort -n | tail -1 | awk '{print $2}') | LAST_BACKUP=$(find $BACKUP_DIR -name "*.tar.gz" -type f -printf '%T@ %p\n' | sort -n | tail -1 | awk '{print $2}') | ||
if [ ! -z "$LAST_BACKUP" ]; then | if [ ! -z "$LAST_BACKUP" ]; then | ||
Строка 333: | Строка 333: | ||
fi | fi | ||
fi | fi | ||
− | </ | + | </pre> |
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | < | + | <pre>sudo chmod +x /usr/local/bin/backup-monitor.sh</pre> |
4. Добавьте в crontab: | 4. Добавьте в crontab: | ||
− | < | + | <pre>*/30 * * * * /usr/local/bin/backup-monitor.sh</pre> |
− | == 9. Восстановление из бэкапа | + | == 9. Восстановление из бэкапа == |
=== Создание скрипта восстановления === | === Создание скрипта восстановления === | ||
1. Создайте скрипт восстановления: | 1. Создайте скрипт восстановления: | ||
− | < | + | <pre>sudo nano /usr/local/bin/minecraft-restore.sh</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>\#!/bin/bash |
− | # Скрипт восстановления из бэкапа | + | \# Скрипт восстановления из бэкапа |
BACKUP_DIR="/backup/minecraft" | BACKUP_DIR="/backup/minecraft" | ||
SERVER_DIR="/opt/minecraft" | SERVER_DIR="/opt/minecraft" | ||
Строка 388: | Строка 388: | ||
echo "Restore completed successfully" | echo "Restore completed successfully" | ||
− | </ | + | </pre> |
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | < | + | <pre>sudo chmod +x /usr/local/bin/minecraft-restore.sh</pre> |
− | == 10. Устранение неполадок | + | == 10. Устранение неполадок == |
=== Частые проблемы === | === Частые проблемы === | ||
Строка 415: | Строка 415: | ||
1. '''Проверка статуса cron''': | 1. '''Проверка статуса cron''': | ||
− | < | + | <pre>sudo systemctl status cron</pre> |
2. '''Проверка логов бэкапа''': | 2. '''Проверка логов бэкапа''': | ||
− | < | + | <pre>tail -f /var/log/minecraft-backup.log</pre> |
3. '''Проверка размера бэкапов''': | 3. '''Проверка размера бэкапов''': | ||
− | < | + | <pre>du -sh /backup/minecraft</pre> |
4. '''Проверка расписания cron''': | 4. '''Проверка расписания cron''': | ||
− | < | + | <pre>sudo crontab -l</pre> |
5. '''Тестирование скриптов''': | 5. '''Тестирование скриптов''': | ||
− | < | + | <pre>sudo /usr/local/bin/minecraft-backup.sh</pre> |
== Заключение == | == Заключение == |
Текущая версия на 10:35, 15 октября 2025
Содержание
- 1 Настройка автоматических бэкапов Minecraft
- 1.1 1. Подготовка системы
- 1.2 2. Установка необходимых пакетов
- 1.3 3. Создание структуры бэкапов
- 1.4 4. Создание скрипта бэкапа
- 1.5 5. Настройка инкрементальных бэкапов
- 1.6 6. Настройка удаленных бэкапов
- 1.7 7. Настройка расписания бэкапов
- 1.8 8. Мониторинг бэкапов
- 1.9 9. Восстановление из бэкапа
- 1.10 10. Устранение неполадок
- 1.11 Заключение
Настройка автоматических бэкапов Minecraft
1. Подготовка системы
- Войдите в систему под учетной записью с правами root или пользователя с правами sudo.
- Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
- Рекомендуется использовать Ubuntu 24.04 LTS для стабильной работы.
2. Установка необходимых пакетов
Обновление системы
1. Обновите систему:
sudo apt update
sudo apt upgrade -y
2. Установите необходимые пакеты:
sudo apt install -y rsync tar gzip zip unzip cron mailutils
Настройка cron
1. Убедитесь, что cron запущен:
sudo systemctl start cron
sudo systemctl enable cron
2. Проверьте статус:
sudo systemctl status cron
3. Создание структуры бэкапов
Создание директорий
1. Создайте основную директорию для бэкапов:
sudo mkdir -p /backup/minecraft
2. Создайте поддиректории:
sudo mkdir -p /backup/minecraft/worlds
sudo mkdir -p /backup/minecraft/plugins
sudo mkdir -p /backup/minecraft/configs
sudo mkdir -p /backup/minecraft/logs
3. Установите права доступа:
sudo chown -R minecraft:minecraft /backup/minecraft
sudo chmod -R 755 /backup/minecraft
Настройка ротации бэкапов
1. Создайте скрипт ротации:
sudo nano /usr/local/bin/backup-rotation.sh
2. Добавьте содержимое:
\#!/bin/bash BACKUP_DIR="/backup/minecraft" RETENTION_DAYS=7 \# Удаление старых бэкапов find $BACKUP_DIR -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete find $BACKUP_DIR -name "*.zip" -mtime +$RETENTION_DAYS -delete \# Удаление пустых директорий find $BACKUP_DIR -type d -empty -delete echo "Backup rotation completed: $(date)"
3. Сделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/backup-rotation.sh
4. Создание скрипта бэкапа
Базовый скрипт бэкапа
1. Создайте основной скрипт бэкапа:
sudo nano /usr/local/bin/minecraft-backup.sh
2. Добавьте содержимое:
\#!/bin/bash \# Настройки бэкапа BACKUP_DIR="/backup/minecraft" SERVER_DIR="/opt/minecraft" DATE=$(date +%Y%m%d_%H%M%S) LOG_FILE="/var/log/minecraft-backup.log" \# Функция логирования log_message() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE } \# Проверка доступности сервера if [ ! -d "$SERVER_DIR" ]; then log_message "ERROR: Server directory not found: $SERVER_DIR" exit 1 fi log_message "Starting Minecraft backup..." \# Создание директории для бэкапа mkdir -p $BACKUP_DIR/$DATE \# Остановка сервера для бэкапа log_message "Stopping Minecraft server..." systemctl stop minecraft-spigot 2>/dev/null || true systemctl stop minecraft-paper 2>/dev/null || true systemctl stop minecraft-bukkit 2>/dev/null || true \# Ожидание полной остановки sleep 10 \# Создание архива мира log_message "Backing up world data..." if [ -d "$SERVER_DIR/world" ]; then tar -czf $BACKUP_DIR/$DATE/world-$DATE.tar.gz -C $SERVER_DIR world log_message "World backup completed" fi \# Создание архива плагинов log_message "Backing up plugins..." if [ -d "$SERVER_DIR/plugins" ]; then tar -czf $BACKUP_DIR/$DATE/plugins-$DATE.tar.gz -C $SERVER_DIR plugins log_message "Plugins backup completed" fi \# Создание архива конфигурации log_message "Backing up configuration..." tar -czf $BACKUP_DIR/$DATE/config-$DATE.tar.gz -C $SERVER_DIR server.properties bukkit.yml spigot.yml paper-global.yml 2>/dev/null || true log_message "Configuration backup completed" \# Создание архива логов log_message "Backing up logs..." if [ -d "$SERVER_DIR/logs" ]; then tar -czf $BACKUP_DIR/$DATE/logs-$DATE.tar.gz -C $SERVER_DIR logs log_message "Logs backup completed" fi \# Создание полного архива log_message "Creating full backup archive..." tar -czf $BACKUP_DIR/minecraft-full-backup-$DATE.tar.gz -C $BACKUP_DIR $DATE log_message "Full backup archive created" \# Удаление временной директории rm -rf $BACKUP_DIR/$DATE \# Запуск сервера log_message "Starting Minecraft server..." systemctl start minecraft-spigot 2>/dev/null || systemctl start minecraft-paper 2>/dev/null || systemctl start minecraft-bukkit 2>/dev/null || true log_message "Minecraft backup completed successfully"
3. Сделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/minecraft-backup.sh
5. Настройка инкрементальных бэкапов
Создание скрипта инкрементального бэкапа
1. Создайте скрипт инкрементального бэкапа:
sudo nano /usr/local/bin/minecraft-incremental-backup.sh
2. Добавьте содержимое:
\#!/bin/bash \# Настройки инкрементального бэкапа BACKUP_DIR="/backup/minecraft" SERVER_DIR="/opt/minecraft" DATE=$(date +%Y%m%d_%H%M%S) LOG_FILE="/var/log/minecraft-incremental-backup.log" SNAPSHOT_DIR="$BACKUP_DIR/snapshots" \# Функция логирования log_message() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE } \# Создание директории для снапшотов mkdir -p $SNAPSHOT_DIR log_message "Starting incremental backup..." \# Создание снапшота мира if [ -d "$SERVER_DIR/world" ]; then rsync -av --delete --link-dest=$SNAPSHOT_DIR/latest $SERVER_DIR/world/ $SNAPSHOT_DIR/world-$DATE/ ln -sfn $SNAPSHOT_DIR/world-$DATE $SNAPSHOT_DIR/latest log_message "World incremental backup completed" fi \# Создание снапшота плагинов if [ -d "$SERVER_DIR/plugins" ]; then rsync -av --delete --link-dest=$SNAPSHOT_DIR/plugins-latest $SERVER_DIR/plugins/ $SNAPSHOT_DIR/plugins-$DATE/ ln -sfn $SNAPSHOT_DIR/plugins-$DATE $SNAPSHOT_DIR/plugins-latest log_message "Plugins incremental backup completed" fi log_message "Incremental backup completed successfully"
3. Сделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/minecraft-incremental-backup.sh
6. Настройка удаленных бэкапов
Установка rsync
1. Убедитесь, что rsync установлен:
sudo apt install -y rsync
Создание скрипта удаленного бэкапа
1. Создайте скрипт удаленного бэкапа:
sudo nano /usr/local/bin/minecraft-remote-backup.sh
2. Добавьте содержимое:
\#!/bin/bash \# Настройки удаленного бэкапа BACKUP_DIR="/backup/minecraft" REMOTE_HOST="backup.example.com" REMOTE_USER="backup" REMOTE_DIR="/backup/minecraft" DATE=$(date +%Y%m%d_%H%M%S) LOG_FILE="/var/log/minecraft-remote-backup.log" \# Функция логирования log_message() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE } log_message "Starting remote backup..." \# Синхронизация с удаленным сервером rsync -avz --delete --progress $BACKUP_DIR/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/ if [ $? -eq 0 ]; then log_message "Remote backup completed successfully" else log_message "ERROR: Remote backup failed" exit 1 fi
3. Сделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/minecraft-remote-backup.sh
Настройка SSH ключей
1. Создайте SSH ключ для бэкапа:
sudo -u minecraft ssh-keygen -t rsa -b 4096 -f /home/minecraft/.ssh/backup_key -N ""
2. Скопируйте публичный ключ на удаленный сервер:
sudo -u minecraft ssh-copy-id -i /home/minecraft/.ssh/backup_key.pub backup@backup.example.com
7. Настройка расписания бэкапов
Настройка cron
1. Отредактируйте crontab:
sudo crontab -e
2. Добавьте задачи бэкапа:
\# Minecraft backups \# Полный бэкап каждый день в 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/minecraft-remote-backup.sh \# Ротация бэкапов каждый день в 5:00 0 5 * * * /usr/local/bin/backup-rotation.sh
Настройка уведомлений
1. Создайте скрипт уведомлений:
sudo nano /usr/local/bin/backup-notification.sh
2. Добавьте содержимое:
\#!/bin/bash \# Настройки уведомлений EMAIL="admin@example.com" LOG_FILE="/var/log/minecraft-backup.log" \# Проверка последнего бэкапа LAST_BACKUP=$(tail -1 $LOG_FILE | grep "completed successfully") if [ -z "$LAST_BACKUP" ]; then echo "Minecraft backup may have failed. Check logs: $LOG_FILE" | mail -s "Minecraft Backup Alert" $EMAIL fi
3. Сделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/backup-notification.sh
4. Добавьте в crontab:
0 6 * * * /usr/local/bin/backup-notification.sh
8. Мониторинг бэкапов
Создание скрипта мониторинга
1. Создайте скрипт мониторинга:
sudo nano /usr/local/bin/backup-monitor.sh
2. Добавьте содержимое:
\#!/bin/bash \# Мониторинг бэкапов BACKUP_DIR="/backup/minecraft" LOG_FILE="/var/log/backup-monitor.log" \# Проверка размера бэкапов BACKUP_SIZE=$(du -sh $BACKUP_DIR | awk '{print $1}') echo "[$(date)] Backup size: $BACKUP_SIZE" >> $LOG_FILE \# Проверка количества бэкапов BACKUP_COUNT=$(find $BACKUP_DIR -name "*.tar.gz" | wc -l) echo "[$(date)] Backup count: $BACKUP_COUNT" >> $LOG_FILE \# Проверка последнего бэкапа LAST_BACKUP=$(find $BACKUP_DIR -name "*.tar.gz" -type f -printf '%T@ %p\n' | sort -n | tail -1 | awk '{print $2}') if [ ! -z "$LAST_BACKUP" ]; then LAST_BACKUP_TIME=$(stat -c %Y "$LAST_BACKUP") CURRENT_TIME=$(date +%s) TIME_DIFF=$((CURRENT_TIME - LAST_BACKUP_TIME)) if [ $TIME_DIFF -gt 86400 ]; then echo "[$(date)] WARNING: Last backup is older than 24 hours" >> $LOG_FILE fi fi
3. Сделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/backup-monitor.sh
4. Добавьте в crontab:
*/30 * * * * /usr/local/bin/backup-monitor.sh
9. Восстановление из бэкапа
Создание скрипта восстановления
1. Создайте скрипт восстановления:
sudo nano /usr/local/bin/minecraft-restore.sh
2. Добавьте содержимое:
\#!/bin/bash \# Скрипт восстановления из бэкапа BACKUP_DIR="/backup/minecraft" SERVER_DIR="/opt/minecraft" RESTORE_DATE=$1 if [ -z "$RESTORE_DATE" ]; then echo "Usage: $0 <backup_date>" echo "Available backups:" ls -la $BACKUP_DIR/*.tar.gz | awk '{print $9}' | sed 's/.*minecraft-full-backup-//' | sed 's/.tar.gz//' exit 1 fi BACKUP_FILE="$BACKUP_DIR/minecraft-full-backup-$RESTORE_DATE.tar.gz" if [ ! -f "$BACKUP_FILE" ]; then echo "Backup file not found: $BACKUP_FILE" exit 1 fi echo "Stopping Minecraft server..." systemctl stop minecraft-spigot 2>/dev/null || true systemctl stop minecraft-paper 2>/dev/null || true systemctl stop minecraft-bukkit 2>/dev/null || true echo "Creating backup of current server..." tar -czf $BACKUP_DIR/current-server-backup-$(date +%Y%m%d_%H%M%S).tar.gz -C $SERVER_DIR . echo "Restoring from backup: $BACKUP_FILE" tar -xzf $BACKUP_FILE -C $BACKUP_DIR tar -xzf $BACKUP_DIR/$RESTORE_DATE/world-$RESTORE_DATE.tar.gz -C $SERVER_DIR tar -xzf $BACKUP_DIR/$RESTORE_DATE/plugins-$RESTORE_DATE.tar.gz -C $SERVER_DIR tar -xzf $BACKUP_DIR/$RESTORE_DATE/config-$RESTORE_DATE.tar.gz -C $SERVER_DIR echo "Starting Minecraft server..." systemctl start minecraft-spigot 2>/dev/null || systemctl start minecraft-paper 2>/dev/null || systemctl start minecraft-bukkit 2>/dev/null || true echo "Restore completed successfully"
3. Сделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/minecraft-restore.sh
10. Устранение неполадок
Частые проблемы
1. Бэкап не создается:
- Проверьте права доступа к директориям
- Проверьте свободное место на диске
- Проверьте логи cron
2. Проблемы с удаленным бэкапом:
- Проверьте SSH соединение
- Проверьте права доступа к удаленному серверу
- Проверьте настройки rsync
3. Проблемы с восстановлением:
- Проверьте целостность архивов
- Проверьте права доступа к файлам
- Проверьте совместимость версий
Диагностика
1. Проверка статуса cron:
sudo systemctl status cron
2. Проверка логов бэкапа:
tail -f /var/log/minecraft-backup.log
3. Проверка размера бэкапов:
du -sh /backup/minecraft
4. Проверка расписания cron:
sudo crontab -l
5. Тестирование скриптов:
sudo /usr/local/bin/minecraft-backup.sh
Заключение
Автоматические бэкапы Minecraft сервера успешно настроены! Теперь у вас есть надежная система резервного копирования с возможностями полных, инкрементальных и удаленных бэкапов.
Для размещения ваших Minecraft серверов с настроенными бэкапами на надежном хостинге рекомендуем воспользоваться услугами [ARK-HOSTER.RU](https://ark-hoster.ru):
- [Выделенные серверы](https://ark-hoster.ru/dedicated/) - для высоконагруженных серверов с большими объемами данных
- [VPS/VDS серверы](https://ark-hoster.ru/vpsgame/) - для небольших и средних серверов
Наши специалисты помогут с настройкой системы бэкапов и обеспечением безопасности ваших данных!