From 2ed5314537d78e1b2acbcbc31682d4da4f21a7be Mon Sep 17 00:00:00 2001 From: BeauTroll <-> Date: Wed, 17 Dec 2025 19:37:56 +0100 Subject: [PATCH] Fix backup script - resolve permission issues and restructure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Major fixes: - Fix script structure: load .env before defining variables - Remove duplicate color definitions (use common.sh) - Fix permission issue: use sudo for du command on data/db dirs - Add fallback to 2GB if disk space calculation fails - Improve error messages and logging The main issue was that data/ and db/ directories are owned by different users (http, 999), causing du to fail even with stderr redirection. Using sudo or || echo "0" fallback fixes this. Tested: Backup now completes successfully with proper logging 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- scripts/backup.sh | 55 +++++++++++++++++++++-------------------------- 1 file changed, 25 insertions(+), 30 deletions(-) diff --git a/scripts/backup.sh b/scripts/backup.sh index 1ee25f6..ef0d630 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -1,46 +1,39 @@ #!/bin/bash -# ============================================ -# Script de sauvegarde Nextcloud -# ============================================ -# Ce script crée une sauvegarde complète de: -# - Données utilisateur -# - Données utilisateur +# scripts/backup.sh - Backup complet Nextcloud set -euo pipefail -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -NC='\033[0m' # No Color - -if [ -f .env ]; then - set -a - source .env - set +a -else - echo -e "${RED}Erreur: Fichier .env non trouvé${NC}" - exit 1 -fi - -# Variables -DATE=$(date +%Y%m%d_%H%M%S) -MAINTENANCE_ENABLED=false - +# Variables globales SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" cd "$PROJECT_ROOT" +# Charger .env en premier +if [ ! -f .env ]; then + echo "ERROR: Fichier .env introuvable" + exit 1 +fi + +set -a +# shellcheck disable=SC1091 +source .env +set +a + +# Configuration +DATE=$(date +%Y%m%d_%H%M%S) LOCK_FILE="/tmp/nextcloud_backup.lock" - -LOG_DIR="${LOG_DESTINATION:-./logs}" +LOG_DIR="./logs" LOG_FILE="$LOG_DIR/backup_$(date +%Y%m%d_%H%M%S).log" - BACKUP_DIR="${BACKUP_DESTINATION:-./backups}" BACKUP_RETENTION_DAYS="${BACKUP_RETENTION_DAYS:-7}" BACKUP_NAME="nextcloud_backup_$DATE" BACKUP_PATH="$BACKUP_DIR/$BACKUP_NAME" +MAINTENANCE_ENABLED=false +mkdir -p "$LOG_DIR" + +# Charger les fonctions communes (log avec couleurs) +# shellcheck disable=SC1091 source "$SCRIPT_DIR/common.sh" if [ -z "${MYSQL_DATABASE:-}" ] || [ -z "${MYSQL_USER:-}" ] || [ -z "${MYSQL_PASSWORD:-}" ]; then @@ -99,9 +92,11 @@ log "INFO" "Log file: $LOG_FILE" log "INFO" "Vérification de l'espace disque..." # Calculer l'espace requis (taille data + db avec 20% de marge) -REQUIRED_SPACE=$(du -sb ./data ./db 2>/dev/null | awk '{sum+=$1} END {print int(sum*1.2)}') +# Utiliser sudo pour accéder aux dossiers appartenant à d'autres utilisateurs +REQUIRED_SPACE=$(sudo du -sb ./data ./db 2>/dev/null | awk '{sum+=$1} END {print int(sum*1.2)}' || echo "0") if [ -z "$REQUIRED_SPACE" ] || [ "$REQUIRED_SPACE" = "0" ]; then - REQUIRED_SPACE=1000000000 # 1GB par défaut si impossible de calculer + log "WARN" "Impossible de calculer l'espace requis (permissions?), estimation à 2GB" + REQUIRED_SPACE=2000000000 # 2GB par défaut si impossible de calculer fi # Obtenir l'espace disponible (enlever les espaces/newlines)