New paste Repaste Download
#!/bin/bash
####6b) Créer le service d'exécution de la sauvegarde avec logging
###script de base geole modifié par iznobe et Watael de remplacement (plus simple) merci à eux
###voir https://forum.kubuntu-fr.org/viewtopic.php?id=2091380&p=5
### modifier les 2 premières variables du script
# Configuration des logs
LOG_DIR="/var/log/backup-script"
LOG_FILE="$LOG_DIR/backup_$(date +%Y%m%d).log"
DEBUG_FILE="$LOG_DIR/debug_$(date +%Y%m%d).log"
ERROR_FILE="$LOG_DIR/error_$(date +%Y%m%d).log"
# Création du répertoire de logs s'il n'existe pas
mkdir -p "$LOG_DIR" 2>/dev/null || {
    # Si création échoue (pas de droits root), utiliser le home de l'utilisateur
    LOG_DIR="$HOME/.logs/backup-script"
    mkdir -p "$LOG_DIR"
    LOG_FILE="$LOG_DIR/backup_$(date +%Y%m%d).log"
    DEBUG_FILE="$LOG_DIR/debug_$(date +%Y%m%d).log"
    ERROR_FILE="$LOG_DIR/error_$(date +%Y%m%d).log"
}
# Mode debug (mettre à 1 pour activer le debug verbeux)
DEBUG_MODE=0
# Fonctions de logging
log_info() {
    local message="$1"
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    echo "[$timestamp] [INFO] $message" | tee -a "$LOG_FILE"
}
log_error() {
    local message="$1"
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    echo "[$timestamp] [ERROR] $message" | tee -a "$LOG_FILE" | tee -a "$ERROR_FILE"
}
log_debug() {
    local message="$1"
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    if [ "$DEBUG_MODE" -eq 1 ]; then
        echo "[$timestamp] [DEBUG] $message" | tee -a "$DEBUG_FILE"
    fi
}
log_warning() {
    local message="$1"
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    echo "[$timestamp] [WARNING] $message" | tee -a "$LOG_FILE"
}
# Fonction pour nettoyer les anciens logs (garde les 30 derniers jours)
cleanup_old_logs() {
    log_debug "Nettoyage des anciens logs (> 30 jours)"
    find "$LOG_DIR" -name "*.log" -type f -mtime +30 -delete 2>/dev/null
}
# Gestion des erreurs et interruptions
trap 'log_error "Script interrompu par signal"; exit 130' INT TERM
# Début du script
log_info "=== DÉBUT DE LA SAUVEGARDE ==="
log_debug "Répertoire des logs: $LOG_DIR"
log_debug "Mode debug: $DEBUG_MODE"
# Nettoyage des anciens logs
cleanup_old_logs
###Paramètres
MountPoint="/media/$USER/JEUX8T"
PartitionUID="35bb9ca2-2022-4dfa-a201-1a2dde7ce1aa"
date=$(date +%F_%Hh%M)
log_info "Configuration:"
log_info "  - Point de montage: $MountPoint"
log_info "  - UUID partition: $PartitionUID"
log_info "  - Date: $date"
log_debug "Utilisateur: $USER"
###controle validité disque solution#125 Watael
log_info "Vérification du disque externe..."
ctrlID=$(findmnt -n --output UUID $MountPoint) ### controle si le disque est monté
log_debug "UUID trouvé: '$ctrlID'"
log_debug "UUID attendu: '$PartitionUID'"
#controle validité disque ancienne version
if [[ "$ctrlID" != "$PartitionUID" ]]
then
    log_error "Disque non reconnu ou éteint"
    log_error "UUID trouvé: '$ctrlID'"
    log_error "UUID attendu: '$PartitionUID'"
    
    echo échec
    echo "ctrlID" $ctrlID
    echo "partition"$PartitionUID
    kdialog --error "Aucun disque reconnu ou disque éteint \n ALLUMER LE DISQUE EXTERNE \n AVANT de sélectionner «OK»"
    
    log_info "Attente du montage du disque..."
    sleep 5
    
    # conditions de détection disque non monté (ctrlID vide)
    attempt=1
    while [[ "$ctrlID" != "$PartitionUID" ]]
    do
        log_debug "Tentative $attempt - Vérification du montage..."
        sleep 2
        #si le montage est reconnu mettre ctrlID à la bonne valeur
        ctrlID=$(findmnt -n --output UUID $MountPoint)
        sleep 1
        log_debug "Ligne $LINENO"
        echo "ctrlID" $ctrlID
        echo "partition" $PartitionUID
        log_debug "UUID vérifié: '$ctrlID'"
        sleep 1
        ((attempt++))
        
        if [ $attempt -gt 60 ]; then
            log_error "Timeout: Disque non monté après 60 tentatives"
            kdialog --error "Timeout: Impossible de détecter le disque"
            exit 1
        fi
    done
    log_info "Disque monté avec succès après $attempt tentatives"
else
    log_info "Disque correctement monté"
    echo réussite
    echo "ctrlID" $ctrlID
    echo "partition" $PartitionUID
    kdialog --error " le disque est monté \n la sauvegarde peut être faite maintenant "
fi
### choix des sauvegardes
log_info "Affichage de la boîte de dialogue de sélection..."
resultats=$(kdialog --separate-output --checklist "Selection liste:"  1 "Sauvegarde Photos" on 2 "Sauvegarde Images" on 4 "Sauvegarde Musiques" on 8 "Sauvegarde DocumentsCommuns" off 16 "Sauvegarde DocumentsEricFanou" off)
if [ $? -ne 0 ]; then
    log_warning "Utilisateur a annulé la sélection"
    exit 0
fi
log_info "Sélections utilisateur: $resultats"
backup_count=0
successful_backups=0
failed_backups=0
for i in $resultats
###choix façon Watael
do
    backup_count=$((backup_count + 1))
    log_info "=== TRAITEMENT SAUVEGARDE $backup_count ==="
    log_debug "Valeur sélectionnée: $i"
    
    case $i in
        1)
            log_info "Sauvegarde Photos sélectionnée"
            echo Photos
            user=Multimedias
            ip=192.168.1.128
            src=/home/Multimedias/MultimediasCommuns/Photos
            dst=/media/kubu/JEUX8T/SAUVEGARDES/
            bkp=incremental-Photos/$date/
            backup_name="Photos"
            ;;
        2)
            log_info "Sauvegarde Images sélectionnée"
            echo Images
            user=Multimedias
            ip=192.168.1.128
            src=/home/Multimedias/MultimediasCommuns/Images
            dst=/media/kubu/JEUX8T/SAUVEGARDES/
            bkp=incremental-Images/$date/
            backup_name="Images"
            ;;
        4)
            log_info "Sauvegarde Musiques sélectionnée"
            echo Musiques
            user=Multimedias
            ip=192.168.1.128
            src=/home/Multimedias/MultimediasCommuns/Musiques
            dst=/media/kubu/JEUX8T/SAUVEGARDES/
            bkp=incremental-Musiques/$date/
            backup_name="Musiques"
            ;;
        8)
            log_info "Sauvegarde DocumentsCommuns sélectionnée"
            echo DocumentsCommuns
            user=Multimedias
            ip=192.168.1.128
            src=/home/Multimedias/DocumentsPartages
            dst=/media/kubu/JEUX8T/SauvegardesDocumentsCommuns/
            bkp=incremental-DocumentsPartages/$date/
            backup_name="DocumentsCommuns"
            ;;
        16)
            log_info "Sauvegarde DocumentsEricFanou sélectionnée"
            echo DocumentsEricFanou
            
            # Première partie - sauvegarde locale
            log_debug "Sauvegarde locale Documents kubu"
            if rsync --progress -a -v --delete-after /home/kubu/Documents/ /home/kubu/VMSauvegardesDocuments/ --backup --backup-dir="incremental-DocumentsEric/$date/" >> "$LOG_FILE" 2>> "$ERROR_FILE"; then
                log_info "Sauvegarde locale Documents kubu réussie"
            else
                log_error "Échec sauvegarde locale Documents kubu"
            fi
            
            user=fanou
            ip=192.168.1.60
            src=/home/fanou/Documents
            dst=/home/kubu/VMSauvegardesDocuments/VMSauvegardesDocumentsFanou/
            bkp=incremental-DocumentsFanou/$date/
            backup_name="DocumentsEricFanou"
            ;;
        *)
            log_warning "Valeur inconnue ignorée: $i"
            continue
            ;;
    esac
    
    log_info "Configuration sauvegarde $backup_name:"
    log_info "  - Source: $user@$ip:$src"
    log_info "  - Destination: $dst"
    log_info "  - Répertoire de sauvegarde: $bkp"
    
    # Test SSH avant rsync pour les sauvegardes distantes
    if [ "$i" != "16" ] || [ "$backup_name" == "DocumentsEricFanou" ]; then
        log_debug "Test de connexion SSH vers $user@$ip..."
        if timeout 10 ssh -o ConnectTimeout=5 -o BatchMode=yes "$user@$ip" exit 2>/dev/null; then
            log_info "Connexion SSH vers $user@$ip: OK"
        else
            log_error "Connexion SSH vers $user@$ip: ÉCHEC"
            failed_backups=$((failed_backups + 1))
            continue
        fi
    fi
    
    # Vérification de l'existence du répertoire de destination
    if [ ! -d "$dst" ]; then
        log_warning "Répertoire destination n'existe pas: $dst"
        log_info "Tentative de création..."
        if mkdir -p "$dst" 2>> "$ERROR_FILE"; then
            log_info "Répertoire créé avec succès: $dst"
        else
            log_error "Impossible de créer le répertoire: $dst"
            failed_backups=$((failed_backups + 1))
            continue
        fi
    fi
    
    kdialog --passivepopup "Sauvegarde $backup_name en cours..." 10 &
    popup_pid=$!
    
    log_info "Début de la sauvegarde $backup_name..."
    start_time=$(date +%s)
    
    # Exécution de rsync avec capture des logs
    if rsync --progress -a -v --delete-after -e ssh $user@$ip:"$src" "$dst" --backup --backup-dir="$bkp" >> "$LOG_FILE" 2>> "$ERROR_FILE"; then
        end_time=$(date +%s)
        duration=$((end_time - start_time))
        log_info "Sauvegarde $backup_name réussie en ${duration}s"
        successful_backups=$((successful_backups + 1))
    else
        end_time=$(date +%s)
        duration=$((end_time - start_time))
        log_error "Échec sauvegarde $backup_name après ${duration}s"
        failed_backups=$((failed_backups + 1))
    fi
done
# Résumé final
log_info "=== RÉSUMÉ FINAL ==="
log_info "Sauvegardes traitées: $backup_count"
log_info "Réussites: $successful_backups"
log_info "Échecs: $failed_backups"
if [ $failed_backups -eq 0 ]; then
    log_info "Toutes les sauvegardes ont réussi !"
    kdialog --msgbox "FIN des sauvegardes $resultats - TOUTES RÉUSSIES !"
else
    log_warning "Certaines sauvegardes ont échoué. Consultez les logs."
    kdialog --msgbox "FIN des sauvegardes $resultats - $failed_backups échec(s) détecté(s)\nConsultez les logs: $LOG_FILE"
fi
log_info "=== FIN DE LA SAUVEGARDE ==="
log_info "Logs disponibles dans: $LOG_DIR"
Filename: None. Size: 10kb. View raw, , hex, or download this file.

This paste expires on 2025-07-17 22:56:01.344320. Pasted through web.