Fix backup script - resolve permission issues and restructure
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 <noreply@anthropic.com>
This commit is contained in:
@@ -1,46 +1,39 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# ============================================
|
# scripts/backup.sh - Backup complet Nextcloud
|
||||||
# Script de sauvegarde Nextcloud
|
|
||||||
# ============================================
|
|
||||||
# Ce script crée une sauvegarde complète de:
|
|
||||||
# - Données utilisateur
|
|
||||||
# - Données utilisateur
|
|
||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
RED='\033[0;31m'
|
# Variables globales
|
||||||
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
|
|
||||||
|
|
||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||||
cd "$PROJECT_ROOT"
|
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"
|
LOCK_FILE="/tmp/nextcloud_backup.lock"
|
||||||
|
LOG_DIR="./logs"
|
||||||
LOG_DIR="${LOG_DESTINATION:-./logs}"
|
|
||||||
LOG_FILE="$LOG_DIR/backup_$(date +%Y%m%d_%H%M%S).log"
|
LOG_FILE="$LOG_DIR/backup_$(date +%Y%m%d_%H%M%S).log"
|
||||||
|
|
||||||
BACKUP_DIR="${BACKUP_DESTINATION:-./backups}"
|
BACKUP_DIR="${BACKUP_DESTINATION:-./backups}"
|
||||||
BACKUP_RETENTION_DAYS="${BACKUP_RETENTION_DAYS:-7}"
|
BACKUP_RETENTION_DAYS="${BACKUP_RETENTION_DAYS:-7}"
|
||||||
BACKUP_NAME="nextcloud_backup_$DATE"
|
BACKUP_NAME="nextcloud_backup_$DATE"
|
||||||
BACKUP_PATH="$BACKUP_DIR/$BACKUP_NAME"
|
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"
|
source "$SCRIPT_DIR/common.sh"
|
||||||
|
|
||||||
if [ -z "${MYSQL_DATABASE:-}" ] || [ -z "${MYSQL_USER:-}" ] || [ -z "${MYSQL_PASSWORD:-}" ]; then
|
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..."
|
log "INFO" "Vérification de l'espace disque..."
|
||||||
|
|
||||||
# Calculer l'espace requis (taille data + db avec 20% de marge)
|
# 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
|
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
|
fi
|
||||||
|
|
||||||
# Obtenir l'espace disponible (enlever les espaces/newlines)
|
# Obtenir l'espace disponible (enlever les espaces/newlines)
|
||||||
|
|||||||
Reference in New Issue
Block a user