64 lines
1.8 KiB
Django/Jinja
64 lines
1.8 KiB
Django/Jinja
#!/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 |