Synchroniser des arborescences entre des serveurs avec rsync

Le script permet de synchroniser des arborescences bureautiques entre deux serveurs Linux, en recopiant également les ACLs.

Script

#!/bin/bash
SERVEURDEST="serveurdistant"
LOG="/var/log/backupQuotidien.log"
ORIGINE="/opt/donnees"
RSYNC="/usr/bin/rsync"
OPTIONS="-rlAogtz"
# Recuperation des parametres
while getopts "l:s:o:d:D-:hm:" OPT
do
    # gestion des options longues
    if test $OPT = '-' ; then
    LONGOPT="${OPTARG%%=*}"
    OPTARG="${OPTARG#*=}"
        case $LONGOPT in
            server) OPT="s";;
            origine) OPT="o";;
            destination) OPT="d";;
            delete) OPT="D";;
            help) OPT="h";;
            mail) OPT="m";;
            log) OPT="l";;
            *) echo "option longue non permise -- $LONGOPT" >&2 ;exit 65;;
        esac
    fi
    case $OPT in
        s) SERVEURDEST=$OPTARG;;
        o) ORIGINE=$OPTARG;;
        d) DESTINATION=$OPTARG;;
        D) DELETE='--delete';;
        m) COURRIEL=$OPTARG;;
        l) LOG=$OPTARG;;
        h)
        echo "synchronise les donnees vers le serveur distant"
        echo "utilisation : synchroData.sh [arguments]"
        echo "[-s serveur|--server=serveur] : nom du serveur distant"
        echo "[-o chemin|--origine=chemin] : chemin a synchroniser"
        echo "[-d chemin|--destination=chemin] : chemin cible"
        echo "[-D|--delete] : supprime les fichiers dans le serveur distant qui n'existent plus dans le serveur source"
        echo "[-m adresse|--mail=adresse] : adresse du courriel a qui envoyer le resultat de l'operation"
        echo "[-l fichier|--log=fichier] : nom du fichier LOG"
        exit 0
        ;;
        *) echo "option non permise ou vide. synchroData.sh -h pour plus d'informations"
        exit 65
        ;;
    esac
done
# Verification des informations essentielles
if test -z $SERVEURDEST ; then
    echo "le nom du serveur de destination n'est pas renseigne"
    exit 65
fi
if test -z $ORIGINE ; then
    echo "le dossier a sauvegarder n'est pas renseigne"
    exit 65
fi
if test -z $RSYNC ; then
    echo "Le nom du programme utilise pour la synchronisation n'est pas renseigne"
    exit 65
fi
if test -z $DESTINATION ; then
    echo "Le nom du dossier de destination n'est pas renseigne"
    exit 65
fi
echo "Lancement de la synchronisation le `date`" >$LOG
echo "commande executee : $RSYNC $OPTIONS $DELETE $ORIGINE $SERVEURDEST:$DESTINATION" >>$LOG
$RSYNC $OPTIONS $DELETE $ORIGINE $SERVEURDEST:$DESTINATION 2>>$LOG
echo "Fin de traitement le `date`" >>$LOG
# Envoi du courriel
if test ! -z $COURRIEL ; then
    SUJET="`hostname` - synchronisation de $ORIGINE vers $SERVEURDEST"
    mail -s "$SUJET" $COURRIEL < $LOG
fi

Usage

La programmation proposée ici fonctionne en créant une sauvegarde bi-quotidienne par rajout de fichier, et une mise en miroir le dimanche (suppression dans la cible des fichiers supprimés pendant la semaine). Le résultat du traitement est envoyé par courriel tous les dimanches

30 12 * * 7 /root/synchroData.sh -s serveurcible -o /opt/donnees -d /opt -m systeme@masociete.fr -D -l /var/log/synchroDonnees.log
00 13,19 * * 1-5 /root/synchroData.sh -s serveurcible -o /opt/donnees -d /opt -l /var/log/synchroDonnees.log