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>
98 lines
3.2 KiB
Bash
Executable File
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é"
|