Un petit script de synchronisation de repertoires sur 2 serveurs - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 31-07-2008 à 12:46:58
J'ai peut-être rien compris, mais t'es pas en train de refaire le travail que rsync fait (très bien) ?
Marsh Posté le 01-08-2008 à 19:35:25
ouais en 100000000x moins puissant et inversement proportionnel niveau bug.
Marsh Posté le 02-08-2008 à 19:36:47
esox_ch a écrit : J'ai peut-être rien compris, mais t'es pas en train de refaire le travail que rsync fait (très bien) ? |
+1, rsync sur ssh est vraiment très bien pour faire du mirroring.
Marsh Posté le 02-08-2008 à 22:36:02
oui effectivement j'ai reinvente la roue sur ce coup
merci de vos contributions
par contre au niveau des bugs taz , peux tu etre plus explicite stp
Marsh Posté le 03-08-2008 à 16:19:28
betsamee a écrit : par contre au niveau des bugs taz , peux tu etre plus explicite stp |
Copie du script pour que l'on puisse comprendre ce que j'écris quand tu auras amélioré ton script sur ton blog :
###############################################################
#! /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
###############################################################
PS: Je te liste quelques erreurs évidentes afin que tu t'améliores, courage
J'ai jeté un coup d'oeil rapide et par exemple :
- Si un fichier est supprimé/modifié sur le mirroir, il ne sera jamais restauré si le fichier n'est pas modifié sur le serveur source.
- Utilisation d'un protocole réseau non sécurisé pour transférer les données, un simple sniffing révèle tout de suite le nom utilisateur, mot de passe et fichier à transférer sur le mirroir pour mettre à peu près ce que l'on veut sur celui-ci.
- Tu écris les mots de passe en clair dans tes scripts apparemment. En plus, tu transfères tout /usr/local/scripts/ en clair (archive non cryptée sur un protocole ftp non crypté), donc un sniffing devrait récupérer pas mal de mots de passe intéressants dans tes scripts.
- Les fichiers qui ne comprennent pas de "." dans leurs noms ne sont pas transférés.
- Les liens symboliques sont copiés comme des fichiers classiques.
- Evaluation de code extrèmement insécurisée (le "| sh" ). Essaie donc de créer un fichier (avec les quotes dans le nom, c'est important) : /db/Archivages/" &>/dev/null; touch /usr/local/scripts/coucou; true || "
Pas de gestion d'erreur, ainsi :
- Si le script de mise à jour sur le mirroir est interrompu, par un reboot intempestif par exemple, les mises à jour ne seront jamais effectuées.
- Si le lien ftp tombe pendant le transfert, les mises à jour qui n'ont pas été transférées ne seront jamais effectuées.
- Si pour une raison quelconque, les copies de fichiers ou le tar ne fonctionne pas (problème temporaire d'espace disque, dépassement temporaire du nombre de processus, ...), des fichiers modifiés ne seront jamais transférés.
Ceci dit, ne désespère pas, c'est très très bien les scripts perso pour automatiser les tâches, pas besoin de faire à la main ce qu'un machine peut très bien faire toute seule. Et on a tous fait ce genre d'erreur par le passé.
Courage betsamee
( Mais pour le coup, rsync/ssh pour du mirroring, c'est vraiment très bien (encore) )
Marsh Posté le 03-08-2008 à 16:26:49
ReplyMarsh Posté le 03-08-2008 à 16:29:07
Alors peut-être deux/trois conseils à tirer :
- Réutilise des logiciels existants plutot que d'en inventer de nouveaux lorsque c'est possible, ils ont déjà été testé et validé par d'autres.
- Ne transfère jamais de données potentiellement sensibles sans les crypter.
- Fait extrèmement attention aux évaluations de code, n'évalue jamais de donnée sans savoir exactement la forme qu'elle prend.
- Les codes de retour et d'erreur plus jamais tu n'ignoreras, c'est très très mal.
Marsh Posté le 31-07-2008 à 10:09:08
Bonjour
Grâce a l'aide de certains d'entre vous j'ai realise un petit script qui, ma foi me sert grandement.
En fait il scanne des répertoires définis sur un serveur X et répercute les modifs de la journée sur ces mêmes répertoires sur un serveur Y:
http://sambranche.blogspot.com/200 [...] on-de.html
je suis ouvert a toute critique (tant que ce n'est pas de la méchanceté gratuite), en espérant avoir pu vous aider
---------------
un blog sur Asterisk