Translate

2008-07-31

Un petit script de synchronisation de repertoires

Ma problématique était plus ou moins simple, permettre a deux serveurs de synchroniser certains répertoires entre eux (un serveur de production et un serveur de backup, le but étant de répercuter toutes les créations et modifications de fichiers sur le serveur de backup)
Donc en fait ce petit script quotidien est simple, il scanne les répertoires que l'on souhaite synchroniser, y détecte les modifications/créations ayant eu lieu dans la journée, crée une archive avec et un fichier de script a exécuter sur le serveur de backup ce qui répercute les modifications.Les transferts ont lieu par ftp:
Voici le code source;

modifs_du_jour.sh ; le script a exécuter tous les jours (dans le cron) sur le serveur de production:

#! /bin/sh
# SL 2008-07-21 Script de synchronisation des repertoires entre la prod et le backup
fichiermodifs=`date +%Y%m%d`'_modifs.sh'
fichiermodifsgz='modifsjour'`date +%Y%m%d`'.tar.gz'
#coordonnees ftp du serveur cible
serveurftp='XXXXXXXXXXX'
userftp='XXXX'
mdpftp='XXXX'
#effacement des modifs de la veille
rm -f -R /db/modifsjour/*
#boucle sur chacun des repertoires que l'on veut synchroniser
for chemin in "/usr/local/scripts/" "/usr/local/apache2/htdocs/" "/bin/*.sh" "/db/factures*" "/db/relancesPDF/" "/db/Archivage/" "/db/contentieux/" "/db/contentieux/" "/db/courriersPDF/" "/db/courriersPDF/" "/db/CR_SiegesPDF/" "/db/tickets/"
do
echo "Traitement de : "$chemin
#creation d'une ligne dans le script qui s'executera sur le serveur de backup avec tous les
#fichiers modifies dans la journee
find $chemin -name "*.*" -mtime 0 | awk 'BEGIN{FS="/"}{print "/bin/sh /bin/repcp.sh \"" $NF "\" \""$0"\""}' >> /db/modifsjour/$fichiermodifs
#copie dans un repertoire de tous les fichiers modifies dans la journee
find $chemin -name "*.*" -mtime 0 | awk '{print "cp \"" $0 "\" /db/modifsjour/"}'|sh
done
cd /db/
#creation de l'archive
tar -cvzf $fichiermodifsgz /db/modifsjour/
#transfert ftp vers le serveur de backup
/usr/bin/ftp -nv $serveurftp < <SCRIPT
quote USER $userftp
quote PASS $mdpftp
binary
prompt
cd modifs
mdelete *.gz
put $fichiermodifsgz
prompt
quit
SCRIPT
rm /db/$fichiermodifsgz

Il reste ensuite a exécuter sur le serveur de backup le script `date +%Y%m%d`'_modifs.sh' qui reconstitue les modifications a partir de l'archive 'modifsjour'`date +%Y%m%d`'.tar.gz'.
Il faut également le code source de repcp.sh qui est une copie récursive qui crée les répertoires si ils n'existent pas (très utile dans le cas de répertoires crées sur le serveur de production).

repcp.sh:

#! /bin/sh
cd /home/ilan/modifs/db/modifsjour/
source="$1"
target="$2"

if [ ! -d `dirname "$target"` ]
then
mkdir -m 755 -p $(dirname "$target")
fi
cp -Rfp "$source" "$target"
exit 0

en espérant vous avoir été utile et en implorant votre indulgence sur les scripts, c'est vraiment pas le langage que j'apprécie!

2 comments:

Samuel Levy said...

suite aux réactions suscitées parce billet il semblerait que l'utilisation de rsync eut été plus judicieuse que la réinvention de la roue :-)

Anonymous said...

Who knows where to download XRumer 5.0 Palladium?
Help, please. All recommend this program to effectively advertise on the Internet, this is the best program!