#!/bin/bash # {{ ansible_managed }} # Script de backup intégré pour Minecraft BACKUP_DIR="{{ minecraft_backup_dir | default('/opt/minecraft/backups') }}" SERVER_DIR="{{ minecraft_server_dir }}" MCRCON="{{ minecraft_tools_dir }}/mcrcon" RCON_PORT="{{ rcon_port }}" RCON_PASS="{{ rcon_password }}" DATE=$(date +%Y%m%d_%H%M%S) # Créer le répertoire de backup si nécessaire mkdir -p "$BACKUP_DIR" # Fonction pour envoyer des commandes RCON send_command() { $MCRCON -H localhost -P $RCON_PORT -p "$RCON_PASS" "$1" 2>/dev/null } # Fonction de backup perform_backup() { echo "[$(date)] Démarrage du backup..." # Avertir les joueurs send_command "say Backup automatique dans 10 secondes..." sleep 5 send_command "say Backup en cours, lag possible..." # Forcer la sauvegarde send_command "save-all flush" sleep 2 # Désactiver l'auto-save temporairement send_command "save-off" # Créer le backup tar -czf "$BACKUP_DIR/minecraft_backup_$DATE.tar.gz" \ -C "$(dirname $SERVER_DIR)" \ "$(basename $SERVER_DIR)" \ --exclude='*.log' \ --exclude='logs/*.gz' \ --exclude='crash-reports/*' # Réactiver l'auto-save send_command "save-on" # Informer les joueurs send_command "say Backup terminé!" echo "[$(date)] Backup créé: minecraft_backup_$DATE.tar.gz" # Nettoyer les vieux backups (garder les 7 derniers) ls -t "$BACKUP_DIR"/minecraft_backup_*.tar.gz 2>/dev/null | tail -n +8 | xargs rm -f } # Vérifier si le serveur est actif if systemctl is-active --quiet {{ minecraft_service_name }}; then perform_backup else echo "[$(date)] Serveur inactif, backup sans RCON..." tar -czf "$BACKUP_DIR/minecraft_backup_offline_$DATE.tar.gz" \ -C "$(dirname $SERVER_DIR)" \ "$(basename $SERVER_DIR)" fi