Files
BeauTroll a7c14f9000 fix: use absolute paths for log files in all scripts
Fixed issue where log file redirections would fail when scripts change
directories. All scripts now use $PROJECT_ROOT/logs/... instead of
relative paths ./logs/...

This prevents errors like "Aucun fichier ou dossier de ce nom" when
scripts execute commands in different directories (e.g., checksum
verification in restore.sh).

Affected files:
- scripts/backup.sh
- scripts/restore.sh
- scripts/update.sh
- scripts/recover.sh

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-17 20:24:48 +01:00

98 lines
3.2 KiB
Bash
Executable File

#!/bin/bash
# scripts/recover.sh - Script de récupération après erreur
set -euo pipefail
# Variables globales
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
cd "$PROJECT_ROOT"
# Configuration des logs
LOG_DIR="./logs"
LOG_FILE="$PROJECT_ROOT/logs/recover_$(date +%Y%m%d_%H%M%S).log"
mkdir -p "$LOG_DIR"
# Charger les fonctions communes (log avec couleurs)
# shellcheck disable=SC1091
source "$SCRIPT_DIR/common.sh"
log "INFO" "=== Script de récupération Nextcloud ==="
log "INFO" "Log file: $LOG_FILE"
# 1. Arrêter tous les conteneurs
log "INFO" "Arrêt de tous les conteneurs..."
if docker-compose down --remove-orphans 2>>"$LOG_FILE"; then
log "INFO" "Conteneurs arrêtés"
else
log "WARN" "Erreur lors de l'arrêt normal, tentative de force..."
docker-compose kill 2>>"$LOG_FILE" || true
docker-compose rm -f 2>>"$LOG_FILE" || true
fi
# 2. Nettoyer les conteneurs orphelins
log "INFO" "Nettoyage des conteneurs orphelins..."
docker container prune -f 2>>"$LOG_FILE" || log "WARN" "Impossible de nettoyer les conteneurs"
# 3. Redémarrer les services
log "INFO" "Redémarrage des services..."
if ! docker-compose up -d 2>>"$LOG_FILE"; then
log "ERROR" "Erreur lors du redémarrage"
log "ERROR" "Vérifiez les logs: docker-compose logs"
exit 1
fi
# 4. Attendre que Nextcloud soit prêt
log "INFO" "Attente du démarrage de Nextcloud (max 2 minutes)..."
for i in {1..120}; do
if docker-compose exec -T nextcloud curl -f http://localhost/status.php >/dev/null 2>&1; then
log "INFO" "Nextcloud prêt (${i}s)"
break
fi
if [ "$i" -eq 120 ]; then
log "ERROR" "Timeout: Nextcloud n'est pas prêt après 2 minutes"
log "ERROR" "Logs des conteneurs:"
docker-compose logs --tail=50 nextcloud 2>&1 | tee -a "$LOG_FILE"
exit 1
fi
sleep 1
done
# 5. Désactiver le mode maintenance
log "INFO" "Désactivation du mode maintenance..."
if docker-compose exec -T -u www-data nextcloud php occ maintenance:mode --off 2>>"$LOG_FILE"; then
log "INFO" "Mode maintenance désactivé"
else
log "WARN" "Impossible de désactiver le mode maintenance"
fi
# 6. Vérifier le statut
log "INFO" "Statut final:"
docker-compose exec -T -u www-data nextcloud php occ status 2>&1 | tee -a "$LOG_FILE" || log "WARN" "Impossible d'obtenir le statut"
# 7. Suggérer les prochaines étapes
log "INFO" "=== Récupération terminée ==="
echo ""
echo "Prochaines étapes:"
echo " 1. Vérifiez que tout fonctionne: make health"
echo " 2. Consultez les logs si nécessaire: make logs"
# Lister les backups disponibles
BACKUP_DIR="${BACKUP_DESTINATION:-./backups}"
if [ -d "$BACKUP_DIR" ]; then
LATEST_BACKUP=$(find "$BACKUP_DIR" -name "nextcloud_backup_*.tar.gz" -type f -printf '%T@ %p\n' 2>/dev/null | sort -rn | head -1 | cut -d' ' -f2-)
if [ -n "$LATEST_BACKUP" ]; then
echo " 3. Si problème persiste, restaurez le backup le plus récent:"
echo " make restore \"$LATEST_BACKUP\""
log "INFO" "Backup le plus récent: $LATEST_BACKUP"
else
echo " 3. Aucun backup disponible dans $BACKUP_DIR"
fi
else
echo " 3. Dossier de backup introuvable: $BACKUP_DIR"
fi
log "SUCCESS" "Script de récupération terminé"