#!/bin/bash BACKUP_TYPE="$1" # daily, weekly, monthly BACKUP_DATE="$2" # YYYYMMDD_HHMMSS format SERVER_DIR="{{ minecraft_server_dir }}" BACKUP_BASE_DIR="{{ minecraft_backups_dir }}" if [ $# -ne 2 ]; then echo "Usage: $0 " echo "Example: $0 daily 20241201_020000" echo "Available backups:" echo "Daily:" ls -1 "${BACKUP_BASE_DIR}/daily/" | grep minecraft_daily echo "Weekly:" ls -1 "${BACKUP_BASE_DIR}/weekly/" | grep minecraft_weekly echo "Monthly:" ls -1 "${BACKUP_BASE_DIR}/monthly/" | grep minecraft_monthly exit 1 fi BACKUP_NAME="minecraft_${BACKUP_TYPE}_${BACKUP_DATE}" BACKUP_DIR="${BACKUP_BASE_DIR}/${BACKUP_TYPE}" {% if backup_compression %} BACKUP_FILE="${BACKUP_DIR}/${BACKUP_NAME}.tar.gz" {% else %} BACKUP_FILE="${BACKUP_DIR}/${BACKUP_NAME}" {% endif %} if [ ! -e "${BACKUP_FILE}" ]; then echo "Backup not found: ${BACKUP_FILE}" exit 1 fi # Stop Minecraft server systemctl stop minecraft # Backup current server (just in case) RESTORE_BACKUP_DIR="${BACKUP_BASE_DIR}/restore_backup" mkdir -p "${RESTORE_BACKUP_DIR}" mv "${SERVER_DIR}" "${RESTORE_BACKUP_DIR}/server_before_restore_$(date +%Y%m%d_%H%M%S)" # Restore from backup {% if backup_compression %} mkdir -p "${SERVER_DIR}" tar -xzf "${BACKUP_FILE}" -C "${BACKUP_DIR}" rsync -av "${BACKUP_DIR}/${BACKUP_NAME}/" "${SERVER_DIR}/" rm -rf "${BACKUP_DIR}/${BACKUP_NAME}" {% else %} rsync -av "${BACKUP_FILE}/" "${SERVER_DIR}/" {% endif %} # Fix permissions chown -R {{ minecraft_user }}:{{ minecraft_group }} "${SERVER_DIR}" # Start Minecraft server systemctl start minecraft echo "Restore completed from: ${BACKUP_FILE}"