Настройка автоматических бэкапов Minecraft: различия между версиями

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к навигации Перейти к поиску
Новая страница: «= Настройка автоматических бэкапов Minecraft = == 1. Подготовка системы == * Войдите в систему п…»
 
Нет описания правки
 
Строка 7: Строка 7:
* Рекомендуется использовать Ubuntu 24.04 LTS для стабильной работы.
* Рекомендуется использовать Ubuntu 24.04 LTS для стабильной работы.


== 2. Установка необходимых пакетов ===
== 2. Установка необходимых пакетов ==


=== Обновление системы ===
=== Обновление системы ===


1. Обновите систему:
1. Обновите систему:
<code>sudo apt update</code>
<pre>sudo apt update</pre>
<code>sudo apt upgrade -y</code>
<pre>sudo apt upgrade -y</pre>


2. Установите необходимые пакеты:
2. Установите необходимые пакеты:
<code>sudo apt install -y rsync tar gzip zip unzip cron mailutils</code>
<pre>sudo apt install -y rsync tar gzip zip unzip cron mailutils</pre>


=== Настройка cron ===
=== Настройка cron ===


1. Убедитесь, что cron запущен:
1. Убедитесь, что cron запущен:
<code>sudo systemctl start cron</code>
<pre>sudo systemctl start cron</pre>
<code>sudo systemctl enable cron</code>
<pre>sudo systemctl enable cron</pre>


2. Проверьте статус:
2. Проверьте статус:
<code>sudo systemctl status cron</code>
<pre>sudo systemctl status cron</pre>


== 3. Создание структуры бэкапов ===
== 3. Создание структуры бэкапов ==


=== Создание директорий ===
=== Создание директорий ===


1. Создайте основную директорию для бэкапов:
1. Создайте основную директорию для бэкапов:
<code>sudo mkdir -p /backup/minecraft</code>
<pre>sudo mkdir -p /backup/minecraft</pre>


2. Создайте поддиректории:
2. Создайте поддиректории:
<code>sudo mkdir -p /backup/minecraft/worlds</code>
<pre>sudo mkdir -p /backup/minecraft/worlds</pre>
<code>sudo mkdir -p /backup/minecraft/plugins</code>
<pre>sudo mkdir -p /backup/minecraft/plugins</pre>
<code>sudo mkdir -p /backup/minecraft/configs</code>
<pre>sudo mkdir -p /backup/minecraft/configs</pre>
<code>sudo mkdir -p /backup/minecraft/logs</code>
<pre>sudo mkdir -p /backup/minecraft/logs</pre>


3. Установите права доступа:
3. Установите права доступа:
<code>sudo chown -R minecraft:minecraft /backup/minecraft</code>
<pre>sudo chown -R minecraft:minecraft /backup/minecraft</pre>
<code>sudo chmod -R 755 /backup/minecraft</code>
<pre>sudo chmod -R 755 /backup/minecraft</pre>


=== Настройка ротации бэкапов ===
=== Настройка ротации бэкапов ===


1. Создайте скрипт ротации:
1. Создайте скрипт ротации:
<code>sudo nano /usr/local/bin/backup-rotation.sh</code>
<pre>sudo nano /usr/local/bin/backup-rotation.sh</pre>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>#!/bin/bash
<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)"
</code>
</pre>


3. Сделайте скрипт исполняемым:
3. Сделайте скрипт исполняемым:
<code>sudo chmod +x /usr/local/bin/backup-rotation.sh</code>
<pre>sudo chmod +x /usr/local/bin/backup-rotation.sh</pre>


== 4. Создание скрипта бэкапа ===
== 4. Создание скрипта бэкапа ==


=== Базовый скрипт бэкапа ===
=== Базовый скрипт бэкапа ===


1. Создайте основной скрипт бэкапа:
1. Создайте основной скрипт бэкапа:
<code>sudo nano /usr/local/bin/minecraft-backup.sh</code>
<pre>sudo nano /usr/local/bin/minecraft-backup.sh</pre>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>#!/bin/bash
<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"
</code>
</pre>


3. Сделайте скрипт исполняемым:
3. Сделайте скрипт исполняемым:
<code>sudo chmod +x /usr/local/bin/minecraft-backup.sh</code>
<pre>sudo chmod +x /usr/local/bin/minecraft-backup.sh</pre>


== 5. Настройка инкрементальных бэкапов ===
== 5. Настройка инкрементальных бэкапов ==


=== Создание скрипта инкрементального бэкапа ===
=== Создание скрипта инкрементального бэкапа ===


1. Создайте скрипт инкрементального бэкапа:
1. Создайте скрипт инкрементального бэкапа:
<code>sudo nano /usr/local/bin/minecraft-incremental-backup.sh</code>
<pre>sudo nano /usr/local/bin/minecraft-incremental-backup.sh</pre>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>#!/bin/bash
<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"
</code>
</pre>


3. Сделайте скрипт исполняемым:
3. Сделайте скрипт исполняемым:
<code>sudo chmod +x /usr/local/bin/minecraft-incremental-backup.sh</code>
<pre>sudo chmod +x /usr/local/bin/minecraft-incremental-backup.sh</pre>


== 6. Настройка удаленных бэкапов ===
== 6. Настройка удаленных бэкапов ==


=== Установка rsync ===
=== Установка rsync ===


1. Убедитесь, что rsync установлен:
1. Убедитесь, что rsync установлен:
<code>sudo apt install -y rsync</code>
<pre>sudo apt install -y rsync</pre>


=== Создание скрипта удаленного бэкапа ===
=== Создание скрипта удаленного бэкапа ===


1. Создайте скрипт удаленного бэкапа:
1. Создайте скрипт удаленного бэкапа:
<code>sudo nano /usr/local/bin/minecraft-remote-backup.sh</code>
<pre>sudo nano /usr/local/bin/minecraft-remote-backup.sh</pre>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>#!/bin/bash
<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
</code>
</pre>


3. Сделайте скрипт исполняемым:
3. Сделайте скрипт исполняемым:
<code>sudo chmod +x /usr/local/bin/minecraft-remote-backup.sh</code>
<pre>sudo chmod +x /usr/local/bin/minecraft-remote-backup.sh</pre>


=== Настройка SSH ключей ===
=== Настройка SSH ключей ===


1. Создайте SSH ключ для бэкапа:
1. Создайте SSH ключ для бэкапа:
<code>sudo -u minecraft ssh-keygen -t rsa -b 4096 -f /home/minecraft/.ssh/backup_key -N ""</code>
<pre>sudo -u minecraft ssh-keygen -t rsa -b 4096 -f /home/minecraft/.ssh/backup_key -N ""</pre>


2. Скопируйте публичный ключ на удаленный сервер:
2. Скопируйте публичный ключ на удаленный сервер:
<code>sudo -u minecraft ssh-copy-id -i /home/minecraft/.ssh/backup_key.pub backup@backup.example.com</code>
<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:
<code>sudo crontab -e</code>
<pre>sudo crontab -e</pre>


2. Добавьте задачи бэкапа:
2. Добавьте задачи бэкапа:
<code># Minecraft backups
<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
</code>
</pre>


=== Настройка уведомлений ===
=== Настройка уведомлений ===


1. Создайте скрипт уведомлений:
1. Создайте скрипт уведомлений:
<code>sudo nano /usr/local/bin/backup-notification.sh</code>
<pre>sudo nano /usr/local/bin/backup-notification.sh</pre>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>#!/bin/bash
<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
</code>
</pre>


3. Сделайте скрипт исполняемым:
3. Сделайте скрипт исполняемым:
<code>sudo chmod +x /usr/local/bin/backup-notification.sh</code>
<pre>sudo chmod +x /usr/local/bin/backup-notification.sh</pre>


4. Добавьте в crontab:
4. Добавьте в crontab:
<code>0 6 * * * /usr/local/bin/backup-notification.sh</code>
<pre>0 6 * * * /usr/local/bin/backup-notification.sh</pre>


== 8. Мониторинг бэкапов ===
== 8. Мониторинг бэкапов ==


=== Создание скрипта мониторинга ===
=== Создание скрипта мониторинга ===


1. Создайте скрипт мониторинга:
1. Создайте скрипт мониторинга:
<code>sudo nano /usr/local/bin/backup-monitor.sh</code>
<pre>sudo nano /usr/local/bin/backup-monitor.sh</pre>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>#!/bin/bash
<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
</code>
</pre>


3. Сделайте скрипт исполняемым:
3. Сделайте скрипт исполняемым:
<code>sudo chmod +x /usr/local/bin/backup-monitor.sh</code>
<pre>sudo chmod +x /usr/local/bin/backup-monitor.sh</pre>


4. Добавьте в crontab:
4. Добавьте в crontab:
<code>*/30 * * * * /usr/local/bin/backup-monitor.sh</code>
<pre>*/30 * * * * /usr/local/bin/backup-monitor.sh</pre>


== 9. Восстановление из бэкапа ===
== 9. Восстановление из бэкапа ==


=== Создание скрипта восстановления ===
=== Создание скрипта восстановления ===


1. Создайте скрипт восстановления:
1. Создайте скрипт восстановления:
<code>sudo nano /usr/local/bin/minecraft-restore.sh</code>
<pre>sudo nano /usr/local/bin/minecraft-restore.sh</pre>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>#!/bin/bash
<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"
</code>
</pre>


3. Сделайте скрипт исполняемым:
3. Сделайте скрипт исполняемым:
<code>sudo chmod +x /usr/local/bin/minecraft-restore.sh</code>
<pre>sudo chmod +x /usr/local/bin/minecraft-restore.sh</pre>


== 10. Устранение неполадок ===
== 10. Устранение неполадок ==


=== Частые проблемы ===
=== Частые проблемы ===
Строка 415: Строка 415:


1. '''Проверка статуса cron''':
1. '''Проверка статуса cron''':
<code>sudo systemctl status cron</code>
<pre>sudo systemctl status cron</pre>


2. '''Проверка логов бэкапа''':
2. '''Проверка логов бэкапа''':
<code>tail -f /var/log/minecraft-backup.log</code>
<pre>tail -f /var/log/minecraft-backup.log</pre>


3. '''Проверка размера бэкапов''':
3. '''Проверка размера бэкапов''':
<code>du -sh /backup/minecraft</code>
<pre>du -sh /backup/minecraft</pre>


4. '''Проверка расписания cron''':
4. '''Проверка расписания cron''':
<code>sudo crontab -l</code>
<pre>sudo crontab -l</pre>


5. '''Тестирование скриптов''':
5. '''Тестирование скриптов''':
<code>sudo /usr/local/bin/minecraft-backup.sh</code>
<pre>sudo /usr/local/bin/minecraft-backup.sh</pre>


== Заключение ==
== Заключение ==

Текущая версия от 10:35, 15 октября 2025

Настройка автоматических бэкапов 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):

Наши специалисты помогут с настройкой системы бэкапов и обеспечением безопасности ваших данных!