new version
Some checks failed
Some checks failed
This commit is contained in:
25
roles/04-backups/templates/backup-daily.sh.j2
Normal file
25
roles/04-backups/templates/backup-daily.sh.j2
Normal file
@@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
# Script de sauvegarde quotidienne Minecraft
|
||||
|
||||
set -e
|
||||
|
||||
BACKUP_DIR="{{ minecraft_backups_dir }}/daily"
|
||||
SOURCE_DIR="{{ minecraft_server_dir }}"
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
BACKUP_NAME="minecraft-daily-${DATE}"
|
||||
RETENTION={{ backup_retention_daily }}
|
||||
|
||||
# Notification du début de sauvegarde
|
||||
echo "$(date): Début de la sauvegarde quotidienne"
|
||||
|
||||
# Commande save-all via rcon si le serveur est en cours
|
||||
{{ minecraft_tools_dir }}/mcrcon/mcrcon -H 127.0.0.1 -P {{ minecraft_rcon_port }} -p {{ minecraft_rcon_password | default('changeme') }} save-all || true
|
||||
sleep 5
|
||||
|
||||
# Création de la sauvegarde
|
||||
rsync {{ rsync_options }} --exclude 'logs' "${SOURCE_DIR}/" "${BACKUP_DIR}/${BACKUP_NAME}/"
|
||||
|
||||
# Nettoyage des anciennes sauvegardes
|
||||
find "${BACKUP_DIR}" -type d -name "minecraft-daily-*" -mtime +${RETENTION} -exec rm -rf {} + 2>/dev/null || true
|
||||
|
||||
echo "$(date): Sauvegarde quotidienne terminée: ${BACKUP_NAME}"
|
24
roles/04-backups/templates/backup-monthly.sh.j2
Normal file
24
roles/04-backups/templates/backup-monthly.sh.j2
Normal file
@@ -0,0 +1,24 @@
|
||||
#!/bin/bash
|
||||
# Script de sauvegarde mensuelle Minecraft
|
||||
|
||||
set -e
|
||||
|
||||
BACKUP_DIR="{{ minecraft_backups_dir }}/monthly"
|
||||
SOURCE_DIR="{{ minecraft_server_dir }}"
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
BACKUP_NAME="minecraft-monthly-${DATE}"
|
||||
RETENTION={{ backup_retention_monthly }}
|
||||
|
||||
echo "$(date): Début de la sauvegarde mensuelle"
|
||||
|
||||
# Commande save-all via rcon
|
||||
{{ minecraft_tools_dir }}/mcrcon/mcrcon -H 127.0.0.1 -P {{ minecraft_rcon_port }} -p {{ minecraft_rcon_password | default('changeme') }} save-all || true
|
||||
sleep 10
|
||||
|
||||
# Création de la sauvegarde
|
||||
rsync {{ rsync_options }} "${SOURCE_DIR}/" "${BACKUP_DIR}/${BACKUP_NAME}/"
|
||||
|
||||
# Nettoyage des anciennes sauvegardes (mois)
|
||||
find "${BACKUP_DIR}" -type d -name "minecraft-monthly-*" -mtime +$((${RETENTION} * 30)) -exec rm -rf {} + 2>/dev/null || true
|
||||
|
||||
echo "$(date): Sauvegarde mensuelle terminée: ${BACKUP_NAME}"
|
24
roles/04-backups/templates/backup-weekly.sh.j2
Normal file
24
roles/04-backups/templates/backup-weekly.sh.j2
Normal file
@@ -0,0 +1,24 @@
|
||||
#!/bin/bash
|
||||
# Script de sauvegarde hebdomadaire Minecraft
|
||||
|
||||
set -e
|
||||
|
||||
BACKUP_DIR="{{ minecraft_backups_dir }}/weekly"
|
||||
SOURCE_DIR="{{ minecraft_server_dir }}"
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
BACKUP_NAME="minecraft-weekly-${DATE}"
|
||||
RETENTION={{ backup_retention_weekly }}
|
||||
|
||||
echo "$(date): Début de la sauvegarde hebdomadaire"
|
||||
|
||||
# Commande save-all via rcon
|
||||
{{ minecraft_tools_dir }}/mcrcon/mcrcon -H 127.0.0.1 -P {{ minecraft_rcon_port }} -p {{ minecraft_rcon_password | default('changeme') }} save-all || true
|
||||
sleep 5
|
||||
|
||||
# Création de la sauvegarde
|
||||
rsync {{ rsync_options }} "${SOURCE_DIR}/" "${BACKUP_DIR}/${BACKUP_NAME}/"
|
||||
|
||||
# Nettoyage des anciennes sauvegardes (semaines)
|
||||
find "${BACKUP_DIR}" -type d -name "minecraft-weekly-*" -mtime +$((${RETENTION} * 7)) -exec rm -rf {} + 2>/dev/null || true
|
||||
|
||||
echo "$(date): Sauvegarde hebdomadaire terminée: ${BACKUP_NAME}"
|
@@ -1,69 +0,0 @@
|
||||
#!/bin/bash
|
||||
# {{ ansible_managed }}
|
||||
|
||||
BACKUP_TYPE=$1
|
||||
BACKUP_BASE="{{ backup_base_dir }}"
|
||||
SERVER_DIR="{{ minecraft_server_dir }}"
|
||||
TOOLS_DIR="{{ minecraft_tools_dir }}"
|
||||
RCON_CMD="{{ minecraft_tools_dir }}/mcrcon -H localhost -P {{ rcon_port }} -p {{ rcon_password }}"
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
|
||||
# Function to clean old backups
|
||||
clean_old_backups() {
|
||||
local dir=$1
|
||||
local keep=$2
|
||||
ls -1t $dir/*.tar.gz 2>/dev/null | tail -n +$((keep+1)) | xargs rm -f
|
||||
}
|
||||
|
||||
# Function to perform backup
|
||||
perform_backup() {
|
||||
local backup_dir=$1
|
||||
local retention=$2
|
||||
|
||||
echo "Starting $BACKUP_TYPE backup at $(date)"
|
||||
|
||||
# Notify players
|
||||
$RCON_CMD "say Server backup starting in 10 seconds..."
|
||||
sleep 10
|
||||
|
||||
# Save world
|
||||
$RCON_CMD "save-all"
|
||||
sleep 5
|
||||
|
||||
# Disable auto-save
|
||||
$RCON_CMD "save-off"
|
||||
|
||||
# Create backup
|
||||
tar -czf "$backup_dir/minecraft_${BACKUP_TYPE}_${DATE}.tar.gz" \
|
||||
-C "{{ minecraft_base_dir }}" \
|
||||
server/ sources/ tools/ \
|
||||
--exclude='*.log' \
|
||||
--exclude='logs/*'
|
||||
|
||||
# Re-enable auto-save
|
||||
$RCON_CMD "save-on"
|
||||
|
||||
# Clean old backups
|
||||
clean_old_backups "$backup_dir" "$retention"
|
||||
|
||||
# Notify players
|
||||
$RCON_CMD "say Server backup completed!"
|
||||
|
||||
echo "Backup completed at $(date)"
|
||||
}
|
||||
|
||||
case "$BACKUP_TYPE" in
|
||||
daily)
|
||||
perform_backup "{{ backup_daily_dir }}" "{{ backup_retention_daily }}"
|
||||
;;
|
||||
weekly)
|
||||
perform_backup "{{ backup_weekly_dir }}" "{{ backup_retention_weekly }}"
|
||||
;;
|
||||
monthly)
|
||||
perform_backup "{{ backup_monthly_dir }}" "{{ backup_retention_monthly }}"
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {daily|weekly|monthly}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
@@ -1,61 +1,53 @@
|
||||
#!/bin/bash
|
||||
# {{ ansible_managed }}
|
||||
# Script de restauration Minecraft
|
||||
|
||||
BACKUP_TYPE=$1
|
||||
BACKUP_DATE=$2
|
||||
BACKUP_BASE="{{ backup_base_dir }}"
|
||||
SERVER_DIR="{{ minecraft_server_dir }}"
|
||||
set -e
|
||||
|
||||
# Function to find backup file
|
||||
find_backup() {
|
||||
local type=$1
|
||||
local date=$2
|
||||
local dir=""
|
||||
|
||||
case "$type" in
|
||||
daily) dir="{{ backup_daily_dir }}" ;;
|
||||
weekly) dir="{{ backup_weekly_dir }}" ;;
|
||||
monthly) dir="{{ backup_monthly_dir }}" ;;
|
||||
*) echo "Invalid backup type"; exit 1 ;;
|
||||
esac
|
||||
|
||||
if [ "$date" = "latest" ]; then
|
||||
ls -1t $dir/*.tar.gz 2>/dev/null | head -n 1
|
||||
else
|
||||
ls $dir/*${date}*.tar.gz 2>/dev/null | head -n 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Main restore process
|
||||
BACKUP_FILE=$(find_backup "$BACKUP_TYPE" "$BACKUP_DATE")
|
||||
|
||||
if [ -z "$BACKUP_FILE" ]; then
|
||||
echo "No backup found for type: $BACKUP_TYPE, date: $BACKUP_DATE"
|
||||
if [ $# -ne 2 ]; then
|
||||
echo "Usage: $0 <type> <backup_name>"
|
||||
echo "Types: daily, weekly, monthly"
|
||||
echo "Exemple: $0 daily minecraft-daily-20240127_020000"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Restoring from: $BACKUP_FILE"
|
||||
TYPE=$1
|
||||
BACKUP_NAME=$2
|
||||
BACKUP_DIR="{{ minecraft_backups_dir }}/${TYPE}"
|
||||
TARGET_DIR="{{ minecraft_server_dir }}"
|
||||
|
||||
# Create restore directory
|
||||
RESTORE_DIR="{{ minecraft_base_dir }}/restore_$(date +%Y%m%d_%H%M%S)"
|
||||
mkdir -p "$RESTORE_DIR"
|
||||
if [ ! -d "${BACKUP_DIR}/${BACKUP_NAME}" ]; then
|
||||
echo "Erreur: Sauvegarde ${BACKUP_NAME} introuvable dans ${BACKUP_DIR}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Extract backup
|
||||
tar -xzf "$BACKUP_FILE" -C "$RESTORE_DIR"
|
||||
echo "ATTENTION: Cette opération va remplacer les données actuelles du serveur."
|
||||
read -p "Voulez-vous continuer? (y/N): " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo "Restauration annulée."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Backup current server
|
||||
echo "Backing up current server state..."
|
||||
tar -czf "{{ backup_base_dir }}/pre_restore_$(date +%Y%m%d_%H%M%S).tar.gz" \
|
||||
-C "{{ minecraft_base_dir }}" server/
|
||||
# Arrêt du serveur
|
||||
echo "Arrêt du serveur Minecraft..."
|
||||
systemctl stop minecraft || true
|
||||
sleep 5
|
||||
|
||||
# Restore files
|
||||
echo "Restoring server files..."
|
||||
rsync -av --delete "$RESTORE_DIR/server/" "$SERVER_DIR/"
|
||||
# Sauvegarde du répertoire actuel
|
||||
CURRENT_BACKUP="${TARGET_DIR}.backup-$(date +%Y%m%d_%H%M%S)"
|
||||
echo "Sauvegarde du répertoire actuel vers ${CURRENT_BACKUP}"
|
||||
cp -r "${TARGET_DIR}" "${CURRENT_BACKUP}"
|
||||
|
||||
# Set permissions
|
||||
chown -R {{ minecraft_user }}:{{ minecraft_group }} "$SERVER_DIR"
|
||||
# Restauration
|
||||
echo "Restauration de ${BACKUP_NAME}..."
|
||||
rsync {{ rsync_options }} "${BACKUP_DIR}/${BACKUP_NAME}/" "${TARGET_DIR}/"
|
||||
|
||||
# Clean up
|
||||
rm -rf "$RESTORE_DIR"
|
||||
# Correction des permissions
|
||||
chown -R {{ minecraft_user }}:{{ minecraft_group }} "${TARGET_DIR}"
|
||||
|
||||
echo "Restore completed successfully!"
|
||||
# Redémarrage du serveur
|
||||
echo "Redémarrage du serveur Minecraft..."
|
||||
systemctl start minecraft
|
||||
|
||||
echo "Restauration terminée avec succès."
|
||||
echo "Sauvegarde de l'ancienne version disponible dans: ${CURRENT_BACKUP}"
|
Reference in New Issue
Block a user