60 lines
1.6 KiB
Django/Jinja
60 lines
1.6 KiB
Django/Jinja
#!/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 <backup_type> <backup_date>"
|
|
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}"
|