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
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
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