Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1921 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [Résolu]Script Shell pour Rsync

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu]Script Shell pour Rsync

n°927979
meijin
Posté le 28-06-2007 à 10:03:21  profilanswer
 

Bonjour,
 
Je suis sur un problème depuis plusieurs jours au niveau de la sauvegarde d'un site web hébergé chez OVH sur un serveur hébergé localement.
La meilleure méthode est Rsync, ca je pense pas que l'on pourra me dire le contraire et je me suis donc tout simplement mis à faire un script qui devra être lancé tous les soirs grâce à un CRON.
 
Seulement ce script fonctionne... bizarrement !! Là ou je lui demande de me sauvegarder /etc, il me sauvegarde /root, et la ou je lui demande de sauver /var, il me sauvegarde /home... donc bon je sèche un peu !!
 
De même, j'ai une variable ou je stock la date du moment pour daté l'archive mais au bout du compte le dossier s'apelle "backup-date".
En esperant que l'on arrivera à me dépanner parce que vraiment je ne vois pas !! Merci d'avance pour votre participation (surtout vu la longueur du script :sleep:  )
 

Code :
  1. #!/bin/sh
  2. ###############################################################################
  3. #########################INITIALISATION DES VARIABLES##########################
  4. ###############################################################################
  5. # Date actuelle pour le nommage des dossiers de sauvegarde
  6. DATEA='date +%d%m%y'
  7. # Repertoires du serveur distant a sauvegarder
  8. SOURCES="/etc \
  9.      /var/www \
  10.      /var/lib/mysql \
  11.      "
  12. # Machine distante
  13. REMMACHINE=@ip machine distante
  14. # Utilisateur distant
  15. REMUSER=root
  16. # Repertoire local de sauvegarde
  17. TARGET="/home/dokeos/backupDokeos"
  18. # Repertoire local de stockage des archives
  19. ARCTARGET="/home/dokeos/backupDokeosArchives"
  20. # Options de la commande RSYNC
  21. OPTIONS="--force --ignore-errors --delete --delete-excluded --backup"
  22. # Fichier "log" ou seront inscrites les diffentes etapes du script (echo)
  23. FICHIERLOG=$TARGET/logbackup
  24. # Fichier "log" distant qui sera envoye a ladministrateur systeme
  25. REMLOG=/home/dokeos/logbackupim
  26. # Adresse Email de l'administrateur systeme
  27. ADDRADMIN=@mail admin
  28. ###############################################################################
  29. ####################################SCRIPT#####################################
  30. ###############################################################################
  31. # Verification de la presence et de l'accessibilite au dossier cible
  32. # Creation si il n'existe pas
  33. if test -x $FICHIERLOG;
  34. then
  35.     rm $FICHIERLOG
  36.     touch $FICHIERLOG
  37. fi
  38. echo "DEBUT" >> $FICHIERLOG
  39. echo "Check des dossiers de sauvegarde ..." >> $FICHIERLOG
  40. # Verification de l'existance du dossier de stockage de la sauvegarde
  41. # Si il n'existe pas, nous le creeons
  42. # Si la creation echoue, exit
  43. echo "Dossier $TARGET check ..." >> $FICHIERLOG
  44. if ! test -x $TARGET;
  45. then
  46.     echo "Le repertoire $TARGET sur la machine locale n'existe pas ou n'as pas des permissions convenables.!." >> $FICHIERLOG
  47.     echo "Creation..." >> $FICHIERLOG
  48.     mkdir -p $TARGET
  49.     if ! test -x $TARGET;
  50.     then
  51.         echo "Le repertoire $TARGET n'a pas pu etre cree ou vous n'avez pas les permissions necessaires pour le faire.!." >> $FICHIERLOG
  52.         echo "Arret du script" >> $FICHIERLOG
  53.         exit 2
  54.     fi
  55.     echo "Repertoire $TARGET cree avec succes !!" $FICHIERLOG
  56.     echo "" >> $FICHIERLOG
  57. fi
  58. # Verification de l'existance du dossier de stockage des archives de sauvegardes
  59. # Si il n'existe pas, nous le creeons
  60. # Si la creation echoue, exit
  61. echo "Dossier $TARGET ok" >> $FICHIERLOG
  62. echo "Dossier $ARCTARGET check ..." >> $FICHIERLOG
  63. if ! test -x $ARCTARGET;
  64. then
  65.     echo "Le repertoire $ARCTARGET sur la machine locale n'existe pas ou n'as pas des permissions convenables.!." >> $FICHIERLOG
  66.     echo "Creation..." >> $FICHIERLOG
  67.     mkdir -p $ARCTARGET
  68.     if ! test -x $ARCTARGET;
  69.     then
  70.         echo "Le repertoire $ARCTARGET n'a pas pu etre cree ou vous n'avez pas les permissions necessaires pour le faire.!." >> $FICHIERLOG
  71.         echo "Arret du script" >> $FICHIERLOG
  72.         exit 2
  73.     fi
  74.     echo "Repertoire $ARCTARGET cree avec succes !!" $FICHIERLOG
  75.     echo "" >> $FICHIERLOG
  76. fi
  77. echo "Dossier $ARCTARGET OK" >> $FICHIERLOG
  78. echo "Check des dossiers de sauvegarde termine avec succes" >> $FICHIERLOG
  79. echo "" >> $FICHIERLOG
  80. # Verification de l'existance des dossiers a sauvegarder
  81. # Si ils n'existent pas, exit
  82. echo "Verification des sources distantes .!." >> $FICHIERLOG
  83. for source in $SOURCES;
  84. do
  85.     echo "Analyse de $SOURCE ..." >> $FICHIERLOG
  86.     if  ! ssh $REMUSER@$REMMACHINE "test -x $SOURCE";
  87.     then
  88.         echo "Erreur sur la source selectionnee" >> $FICHIERLOG
  89.         echo "Repertoire inexistant ou n'ayant pas les permissions suffisantes" >> $FICHIERLOG
  90.         echo "" >> $FICHIERLOG
  91.         exit 2
  92.     fi
  93.     echo "Analyse de $SOURCE terminee avec succes !!" >> $FICHIERLOG
  94. done
  95. echo "Verification des sources distantes termine avec succes !" >> $FICHIERLOG
  96. echo "" >> $FICHIERLOG
  97. echo "LANCEMENT DE LA SAUVEGARDE..." >> $FICHIERLOG
  98. for source in $SOURCES;
  99. do
  100. # Creation du dossier correspondant a la source sur le serveur de sauvegarde
  101.     if ! test -d $TARGET/$SOURCE;
  102.     then
  103.         mkdir -p $TARGET/$SOURCE
  104.         echo "Dossier de $SOURCE cree avec succes sur la sauvegarde" >> $FICHIERLOG
  105.     fi
  106. # Lancement de la commande de sauvegarde RSYNC
  107. echo "Lancement de RSYNC..." >> $FICHIERLOG
  108.     rsync $OPTIONS -avzr -e "ssh" $REMUSER@$REMMACHINE:$SOURCE $TARGET/$SOURCE
  109. done
  110. echo "SAUVEGARDE TERMINEE AVEC SUCCES !!" >> $FICHIERLOG
  111. echo "ARCHIVAGE..." >> $FICHIERLOG
  112. # Archivage de la sauvegarde du jour
  113. tar -cvzf $TARGET-$DATEA.tar.gz $TARGET
  114. cp -R $TARGET-$DATEA.tar.gz $ARCDATEA
  115. echo "ARCHIVAGE TERMINE AVEC SUCCES !!" >> $FICHIERLOG
  116. echo "" >> $FICHIERLOG
  117. echo "JOURNALISATION TERMINEE AVEC SUCCES" >> $FICHIERLOG
  118. # Envoie du fichier de log sur le serveur distant pour que celui ci puisse l'envoyer sur l'email de l'administrateur systeme
  119. scp $FICHIERLOG $REMMACHINE:$REMLOG
  120. ssh $REMUSER@$REMMACHINE "mail -s 'backup du jour' ADDRADMIN < $REMLOG"

Message cité 1 fois
Message édité par meijin le 28-06-2007 à 11:11:51
mood
Publicité
Posté le 28-06-2007 à 10:03:21  profilanswer
 

n°927984
franceso
Posté le 28-06-2007 à 10:23:19  profilanswer
 

déjà, tu as une erreur ligne 8 : il faut mettre la commande entre backquotes :

DATEA=`date +%d%m%y`


Ca devrait régler ton problème de nom de dossier de sauvegarde.
 
Pour le reste, j'ai pas eu le temps de regarder les détails...


---------------
TriScale innov
n°927986
Le_Tolier
Hello IT ?
Posté le 28-06-2007 à 10:30:09  profilanswer
 

dans ton for tu met source et après tu utilise $SOURCE ?


---------------
Never f**k with your systems administrator. Why? Because they know what you do with all that free time! |?? | SAVE Jericho !
n°927987
meijin
Posté le 28-06-2007 à 10:31:16  profilanswer
 

Ah merci bien, en effet ca marche tout de suite mieux comme ca ^^
 
En passant une petite précision, la commande rsync utilisée dans ce script je l'ai testée avant en ne mettant pas de variables mais les chemin réels etc... et elle fonctionnais tres bien
 
 
Edit : C'est au niveau des majuscules que ca te choque?

Message cité 1 fois
Message édité par meijin le 28-06-2007 à 10:31:58
n°928004
dnlilas
Posté le 28-06-2007 à 10:55:07  profilanswer
 

Quelques remarques:
- ligne 153: sans doute $ADDRADMIN au lieu de ADDRADMIN.  
Sans doute à utiliser dans le subject $DATEA aussi ce qui permet d'avoir la date dans le sujet du courrier.
- même question soumise par Le_Tolier.
- scp/ssh: je me demande où tu fournis login/password SSH.

n°928005
Le_Tolier
Hello IT ?
Posté le 28-06-2007 à 10:58:52  profilanswer
 

meijin a écrit :

Ah merci bien, en effet ca marche tout de suite mieux comme ca ^^

 

En passant une petite précision, la commande rsync utilisée dans ce script je l'ai testée avant en ne mettant pas de variables mais les chemin réels etc... et elle fonctionnais tres bien

 


Edit : C'est au niveau des majuscules que ca te choque?

 

c'est pas le fait d'utiliser des majuscule, mais plus que un coup c est source et après SOURCE, je sais pas si ca fonctionne très bien.

 
dnlilas a écrit :

Quelques remarques:
- ligne 153: sans doute $ADDRADMIN au lieu de ADDRADMIN.
Sans doute à utiliser dans le subject $DATEA aussi ce qui permet d'avoir la date dans le sujet du courrier.
- même question soumise par Le_Tolier.
- scp/ssh: je me demande où tu fournis login/password SSH.

 

utilisation de clef ssh surment

Message cité 1 fois
Message édité par Le_Tolier le 28-06-2007 à 10:59:22

---------------
Never f**k with your systems administrator. Why? Because they know what you do with all that free time! |?? | SAVE Jericho !
n°928007
meijin
Posté le 28-06-2007 à 11:01:50  profilanswer
 

dnlilas a écrit :

Quelques remarques:
- ligne 153: sans doute $ADDRADMIN au lieu de ADDRADMIN.  
Sans doute à utiliser dans le subject $DATEA aussi ce qui permet d'avoir la date dans le sujet du courrier.


 
Merci c'est corrigé, j'avais pas fais attention
 

dnlilas a écrit :

- même question soumise par Le_Tolier.


 
Justement je comprend pas bien sa question en fait si vous pouviez préciser ce qui pose pb
parce que en fait ce que je fais c'est que a chaque bouclage, je prend ce qu'il ya dans $SOURCES (initialisée au dessus) et je met dans source histoire que chaque boucle s'occupe d'un dossier spécifique...  
 
En gros au premier coup ya /etc qui se met dans source et je le ressort ensuite en appelant ma variable comme on appelle un variable normale. A moins que je n'ai pas bien saisi le concept du for... :??:  
 
 

dnlilas a écrit :

- scp/ssh: je me demande où tu fournis login/password SSH.


 
En fait j'ai générer une paire de clés DSA et j'ai mis la clé publique de l'user local dans le authorized_keys de mon serveur de prod ;)

n°928008
meijin
Posté le 28-06-2007 à 11:03:46  profilanswer
 

Le_Tolier a écrit :

c'est pas le fait d'utiliser des majuscule, mais plus que un coup c est source et après SOURCE, je sais pas si ca fonctionne très bien.


 
Je dois avouer que pour le for j'ai regarder un peu les exemples sur le net et j'ai vu des personnes faire comme ça donc j'ai betement suivi mais tu as peux etre raison, je vais modifier et voir ce que ca donne, merci pour la remarque
 
Bon ben tu avais raison en effet maintenant ca passe tout bien vraisemblablement... en tout cas pour l'instant car la sauvegarde est très longue vue les données a récupérée !!
 
Encore une fois je me suis fais pieger par une erreur des plus primitives
 
Merci beaucoup pour votre aide :jap:  Vous m'avez vraiment sortis une grosse épine du pied


Message édité par meijin le 28-06-2007 à 11:11:25
n°928013
wedgeant
Da penguin inside
Posté le 28-06-2007 à 11:22:08  profilanswer
 

franceso a écrit :

déjà, tu as une erreur ligne 8 : il faut mettre la commande entre backquotes :

DATEA=`date +%d%m%y`


Ca devrait régler ton problème de nom de dossier de sauvegarde.
 
Pour le reste, j'ai pas eu le temps de regarder les détails...


Et d'ailleurs, pour rester compatible avec les nouvelles versions de bash, il vaut mieux mettre

DATEA=$(date +%d%m%y)


 
[:cupra]


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
n°928019
memaster
ki a volé mon 62?
Posté le 28-06-2007 à 11:24:48  profilanswer
 

wedgeant a écrit :

Et d'ailleurs, pour rester compatible avec les nouvelles versions de bash, il vaut mieux mettre

DATEA=$(date +%d%m%y)

 

[:cupra]


ah bon donc, il considere l'expression calculée comme variable :love:
c'est bien mieux comme cela

Message cité 1 fois
Message édité par memaster le 28-06-2007 à 11:25:06

---------------
ma conduite intérieure .:R | memaster pilote officiel de la HFR Badoit-Auchan F1 Team | zéro tracas, zéro blabla MMa.ster
mood
Publicité
Posté le 28-06-2007 à 11:24:48  profilanswer
 

n°928023
franceso
Posté le 28-06-2007 à 11:28:03  profilanswer
 

memaster a écrit :

ah bon donc, il considere l'expression calculée comme variable :love:  
c'est bien mieux comme cela

Non, une variable, ce serait plutôt ${VAR}.
 
Mais c'est vrai que c'est vachement mieux comme ça pour les problèmes d'imbrications de quotes etc...


---------------
TriScale innov
n°928028
meijin
Posté le 28-06-2007 à 11:35:11  profilanswer
 

wedgeant a écrit :

Et d'ailleurs, pour rester compatible avec les nouvelles versions de bash, il vaut mieux mettre

DATEA=$(date +%d%m%y)


 
[:cupra]


 
 
Ok merci, et c'est vrai que c'est plus clair qu'avec les backquotes! et plus dans la logique du langage

n°928069
matafan
Posté le 28-06-2007 à 12:25:12  profilanswer
 

La syntaxe $() c'est une extension... La bonne notation, la seule la vraie l'originale, c'est les backquotes. Genre sous bsh, y'a pas $().

n°928073
memaster
ki a volé mon 62?
Posté le 28-06-2007 à 12:28:10  profilanswer
 

matafan a écrit :

La syntaxe $() c'est une extension... La bonne notation, la seule la vraie l'originale, c'est les backquotes. Genre sous bsh, y'a pas $().


j'allais posé la question de la compatibilité du code avec le standard :??:


---------------
ma conduite intérieure .:R | memaster pilote officiel de la HFR Badoit-Auchan F1 Team | zéro tracas, zéro blabla MMa.ster
n°928077
wedgeant
Da penguin inside
Posté le 28-06-2007 à 12:38:06  profilanswer
 

matafan a écrit :

La syntaxe $() c'est une extension... La bonne notation, la seule la vraie l'originale, c'est les backquotes. Genre sous bsh, y'a pas $().


Voui, mais là il code en bash donc on s'en tape de la comptatibilité inverse :o


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
n°928115
memaster
ki a volé mon 62?
Posté le 28-06-2007 à 13:43:26  profilanswer
 

wedgeant a écrit :

Voui, mais là il code en bash donc on s'en tape de la comptatibilité inverse :o


portabilité du code toussa :o


---------------
ma conduite intérieure .:R | memaster pilote officiel de la HFR Badoit-Auchan F1 Team | zéro tracas, zéro blabla MMa.ster
n°928120
franceso
Posté le 28-06-2007 à 13:49:45  profilanswer
 

wedgeant a écrit :

Voui, mais là il code en bash donc on s'en tape de la comptatibilité inverse :o


 

meijin a écrit :

Code :
  1. #!/bin/sh


Y a rien qui te garantit que /bin/sh -> bash sur toutes les plateformes... [:cerveau o]


---------------
TriScale innov
n°928325
Xavier_OM
Pas de slips radioactifs !
Posté le 28-06-2007 à 21:51:42  profilanswer
 

Sauf que personne ne fait de vrai sh 'pur'... j'ai essayé une fois en suivant les recommandations de portabilité des autotools :
http://www.gnu.org/software/autoco [...] tml#SEC114
 
La section 10.8 nous apprend que "!" pour la négation logique n'est pas portable, et la section 10.5 que $@ non plus (bon ca ok c'est connu).
 
Donc les shell script portables, j'y crois pas... autant mettre #!/bin/bash en shebang, assumer et utiliser les bashismes à donf ( genre ((i++)) et autres [[ ]] ) :o


---------------
https://www.baba-patrimoine.fr/  pour tout comprendre sur l'art et le patrimoine
n°928383
chaica
Posté le 29-06-2007 à 04:55:33  profilanswer
 

A mon avisl'erreur c'est  la notion de script shell portable :D

n°928434
franceso
Posté le 29-06-2007 à 09:45:19  profilanswer
 

Xavier_OM a écrit :

Sauf que personne ne fait de vrai sh 'pur'... j'ai essayé une fois en suivant les recommandations de portabilité des autotools :
http://www.gnu.org/software/autoco [...] tml#SEC114
 
La section 10.8 nous apprend que "!" pour la négation logique n'est pas portable, et la section 10.5 que $@ non plus (bon ca ok c'est connu).
 
Donc les shell script portables, j'y crois pas... autant mettre #!/bin/bash en shebang, assumer et utiliser les bashismes à donf ( genre ((i++)) et autres [[ ]] ) :o


Dans apt-zip, on fait du shell-script portable :o
 
C'est pas si difficile, il suffit de vérifier que ton script passe aussi avec dash, et tu es à peu près sûr qu'il n'y a aucun bashisme dedans...


---------------
TriScale innov
n°928457
Xavier_OM
Pas de slips radioactifs !
Posté le 29-06-2007 à 10:24:48  profilanswer
 

franceso a écrit :

Dans apt-zip, on fait du shell-script portable :o
 
C'est pas si difficile, il suffit de vérifier que ton script passe aussi avec dash, et tu es à peu près sûr qu'il n'y a aucun bashisme dedans...


 
j'ai survolé le code d'apt-zip ya quelque temps, et j'ai des doutes sur la portabilité  :o


---------------
https://www.baba-patrimoine.fr/  pour tout comprendre sur l'art et le patrimoine
n°928458
memaster
ki a volé mon 62?
Posté le 29-06-2007 à 10:27:49  profilanswer
 

chaica a écrit :

A mon avisl'erreur c'est  la notion de script shell portable :D


on dira portable avec le minimum de modifs parce que le code parfait n'existe pas

Message cité 1 fois
Message édité par memaster le 29-06-2007 à 10:28:09

---------------
ma conduite intérieure .:R | memaster pilote officiel de la HFR Badoit-Auchan F1 Team | zéro tracas, zéro blabla MMa.ster
n°928462
franceso
Posté le 29-06-2007 à 10:33:36  profilanswer
 

Xavier_OM a écrit :

j'ai survolé le code d'apt-zip ya quelque temps, et j'ai des doutes sur la portabilité  :o


Je parle pas du code d'apt-zip lui même (qui est destiné à tourner sur des machines Debian, donc possédant bash), mais plutôt des scripts de téléchargement des paquets qui sont générés.
Si tu as des doutes sur la portabilité à ce niveau-là, n'hésite pas à le signaler : ça fait partie des choses qu'on essaie de garantir.


---------------
TriScale innov
n°928469
wedgeant
Da penguin inside
Posté le 29-06-2007 à 10:45:17  profilanswer
 

memaster a écrit :

on dira portable avec le minimum de modifs parce que le code parfait n'existe pas


Sisi, ça existe:

Code :
  1. #! /bin/sh
  2. echo


 
[:cerveau cupra]


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
n°928471
memaster
ki a volé mon 62?
Posté le 29-06-2007 à 10:48:35  profilanswer
 

wedgeant a écrit :

Sisi, ça existe:

Code :
  1. #! /bin/sh
  2. echo


 
[:cerveau cupra]


on mettra ça sur le compte du vendredi :heink:


---------------
ma conduite intérieure .:R | memaster pilote officiel de la HFR Badoit-Auchan F1 Team | zéro tracas, zéro blabla MMa.ster
n°928526
Xavier_OM
Pas de slips radioactifs !
Posté le 29-06-2007 à 12:08:16  profilanswer
 

wedgeant a écrit :

Sisi, ça existe:

Code :
  1. #! /bin/sh
  2. echo


 
[:cerveau cupra]


 
méfions-nous du echo :D http://www.gnu.org/software/autoco [...] tml#SEC122


---------------
https://www.baba-patrimoine.fr/  pour tout comprendre sur l'art et le patrimoine
n°933674
sputnick
bip...bip...bip...bip...bi...b
Posté le 13-07-2007 à 02:05:34  profilanswer
 

Salut,
 
au cas ou tu ne le sait pas, tu peut mettre ton script en debug de plusieurs façons:
mettre  
#!/bin/sh -x
au debut,
executer le script comme ça:
sh -x lescript.sh
 
ligne 47:
if test -x $FICHIERLOG;
AMHA -x c'est pour les executables. un fichier c'est -f ou -e
 
Il faut "quoter" toutes les variables.
 
++
 

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [Résolu]Script Shell pour Rsync

 

Sujets relatifs
Script pour effacer requetes SQL sur Webmin[RESOLU] Postfix avec plusieurs smtp
[résolu] Lancer jhead dans un terminal[resolu] warning a l'extection de la machine
[resolu] lamescript zsh avec utilisation de awk, passage de variable
[tomate marabooté] re-install ce WE... Ce soir c'est open BAR !!Script python mplayer
Plus de sujets relatifs à : [Résolu]Script Shell pour Rsync


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR