Configuration Rsync
Résolu
davielsons-enfer
Messages postés
281
Date d'inscription
Statut
Membre
Dernière intervention
-
davielsons-enfer Messages postés 281 Date d'inscription Statut Membre Dernière intervention -
davielsons-enfer Messages postés 281 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Configuration Rsync
- Ethernet n'a pas de configuration ip valide - Guide
- Panneau de configuration - Guide
- Retablir configuration usine chromecast - Guide
- Connaitre configuration pc - Guide
- Configuration chromecast - Guide
4 réponses
La commande rsync propose une option bandwidth.
https://www.howtogeek.com/50794/keep-rsync-from-using-all-your-bandwidth/
Le truc c'est que je ne pense pas que tu puisses changer facilement ce débit une fois que la commande rsync est lancée. Donc la seule manière que je vois de faire, c'est d'interrompre ton rsync quand tu changes de plage horaire.
Par contre il faut faire quelques tests pour vérifier que le fichier dont le transfert à été interrompu va être repris/réécrit. dans le doute, il suffit de supprimer ce fichier et de relancer rsync ensuite.
Bonne chance
https://www.howtogeek.com/50794/keep-rsync-from-using-all-your-bandwidth/
Le truc c'est que je ne pense pas que tu puisses changer facilement ce débit une fois que la commande rsync est lancée. Donc la seule manière que je vois de faire, c'est d'interrompre ton rsync quand tu changes de plage horaire.
Par contre il faut faire quelques tests pour vérifier que le fichier dont le transfert à été interrompu va être repris/réécrit. dans le doute, il suffit de supprimer ce fichier et de relancer rsync ensuite.
Bonne chance
davielsons-enfer
Messages postés
281
Date d'inscription
Statut
Membre
Dernière intervention
15
Vu que c'est dans une optique professionnelle, une véritable automatisation de rsync serait royale.. Tu connaîtrais un autre moyen pour faire ce que je recherche ?
Pour automatiser rsync tu peux utiliser cron+anacron ou fcron.
http://doc.ubuntu-fr.org/cron
http://doc.ubuntu-fr.org/anacron
http://doc.ubuntu-fr.org/fcron
Il faut juste que cron tue le processus associé à rsync après avoir récupéré le nom du fichier en cours de synchronisation (si tu t'aperçois au cours de tes tests que le fichier en cours de synchronisation n'est pas repris et partiellement écrit). Ensuite il suffit de relancer rsync avec les bons paramètres (bandwith notamment en regardant l'heure).
Avant de penser à une automatisation avec cron ou équivalent, le mieux ce serait que tu commences à écrire le script shell qui sera invoqué par cron et qui en fonction de l'heure, lancera cron avec les bons paramètres. Tu pourras en profiter pour voir comment ça se comporte si un transfert de fichier est coupé en plein milieu.
Ça va ressembler en gros à ceci (script à vérifier et à tester), en supposant que tu utilises ssh pour transporter les informations synchronisées par rsync :
Par rapport aux options passées à rsync :
http://doc.ubuntu-fr.org/rsync
Ensuite il faut installer une clé ssh sur la machine qui exécute ce script pour pouvoir se connecter au serveur sans avoir à taper de mot de passe.
http://prendreuncafe.com/blog/post/2005/08/29/262-installer-sa-cle-ssh-sur-un-serveur-distant
Une fois que ce script fonctionne correctement, tu pourras l'intégrer dans un cron.
Bonne chance
http://doc.ubuntu-fr.org/cron
http://doc.ubuntu-fr.org/anacron
http://doc.ubuntu-fr.org/fcron
Il faut juste que cron tue le processus associé à rsync après avoir récupéré le nom du fichier en cours de synchronisation (si tu t'aperçois au cours de tes tests que le fichier en cours de synchronisation n'est pas repris et partiellement écrit). Ensuite il suffit de relancer rsync avec les bons paramètres (bandwith notamment en regardant l'heure).
Avant de penser à une automatisation avec cron ou équivalent, le mieux ce serait que tu commences à écrire le script shell qui sera invoqué par cron et qui en fonction de l'heure, lancera cron avec les bons paramètres. Tu pourras en profiter pour voir comment ça se comporte si un transfert de fichier est coupé en plein milieu.
Ça va ressembler en gros à ceci (script à vérifier et à tester), en supposant que tu utilises ssh pour transporter les informations synchronisées par rsync :
#!/bin/bash # Source src="/home/toto" # Destination dst_login="tata" dst_host="1.2.3.4" dst_path="/tmp" dst="$dst_login@dst_host:$dst_path" # Si un script toto.sh on le tue for pid in $(ps aux | grep -v grep | grep $(basename $0)) do kill -9 $pid done # Selon l'heure, on définit ou non l'option bandwidth hour=$(date -u +"%H") if [ $hour -lt 20 ] && [ $hour -ge 8 ] then bw="--bandwith=40" fi # Lancer la commande rsync echo "rsync -avz --delete-after $bw $src $dst" rsync -avz --delete-after $bw $src $dst exit 0
Par rapport aux options passées à rsync :
http://doc.ubuntu-fr.org/rsync
Ensuite il faut installer une clé ssh sur la machine qui exécute ce script pour pouvoir se connecter au serveur sans avoir à taper de mot de passe.
http://prendreuncafe.com/blog/post/2005/08/29/262-installer-sa-cle-ssh-sur-un-serveur-distant
Une fois que ce script fonctionne correctement, tu pourras l'intégrer dans un cron.
Bonne chance
# Selon l'heure, on définit ou non l'option bandwidth
hour=$(date -u +"%H")
if [ $hour -lt 20 ] && [ $hour -ge 8 ]
then
bw="--bandwith=40"
fi
---------------------------------
On peut réellement intégrer ce genre de paramètre dans un script shell ?
Je pensais plutôt à faire un shell où c'est à nous de rentrer les paramètres concernant le client et la vitesse demandée.
#!/bin/bash
#choix du client
echo "Client :"$1
#choix de la vitesse en Kb/s
echo "Vitesse :"$2
#Lancement du transfert archivé et compressé
rsync avz --bwlimit=$2 /home user@$1:/save/$1
-----------------------------
Mais je sais pas si cela pourrait marcher..
Le tien serait extra en le bidouillant pour rentrer les différents paramètres lors du lancement. "./toto.sh client 80 40" vitesse de nuit et de jour.
Puis si on veut vraiment l'optimiser faudrait dire dans un cron que le samedi et dimanche, tu me le laisses en vitesse max.
hour=$(date -u +"%H")
if [ $hour -lt 20 ] && [ $hour -ge 8 ]
then
bw="--bandwith=40"
fi
---------------------------------
On peut réellement intégrer ce genre de paramètre dans un script shell ?
Je pensais plutôt à faire un shell où c'est à nous de rentrer les paramètres concernant le client et la vitesse demandée.
#!/bin/bash
#choix du client
echo "Client :"$1
#choix de la vitesse en Kb/s
echo "Vitesse :"$2
#Lancement du transfert archivé et compressé
rsync avz --bwlimit=$2 /home user@$1:/save/$1
-----------------------------
Mais je sais pas si cela pourrait marcher..
Le tien serait extra en le bidouillant pour rentrer les différents paramètres lors du lancement. "./toto.sh client 80 40" vitesse de nuit et de jour.
Puis si on veut vraiment l'optimiser faudrait dire dans un cron que le samedi et dimanche, tu me le laisses en vitesse max.
On peut réellement intégrer ce genre de paramètre dans un script shell ?
Ben oui là c'est évalué dynamiquement à l'exécution ce qui évite d'avoir à passer un paramètre. Après rien ne t'empêche que ce soit un paramètre de ton script.
Je pensais plutôt à faire un shell où c'est à nous de rentrer les paramètres concernant le client et la vitesse demandée.
Si ton script est capable de les calculer pourquoi faire ? De plus il faut bien voir que tu vas instancier ton script depuis un cron à terme, donc il faudra bien à un moment définir ce paramètre. Ou alors il faut que ton cron instancie explicitement rsync avec les bons paramètres (en fonction de l'heure à laquelle le job est instancié).
Le tien serait extra en le bidouillant pour rentrer les différents paramètres lors du lancement. "./toto.sh client 80 40" vitesse de nuit et de jour.
Bah c'est trivial tu peux récupérer les valeurs client 80 et 40 respectivement dans $1, $2 et $3. Cf cours de shell.
Puis si on veut vraiment l'optimiser faudrait dire dans un cron que le samedi et dimanche, tu me le laisses en vitesse max.
Encore une fois c'est trivial. Tu vois que mon script récupère l'heure UTC avec la commande date. De la même manière tu peux demander à date de te retourner le jour, il faut juste l'instancier avec les bons paramètres.
Exemple :
(retourne 1 si on est lundi, 2 si on est mardi, etc...).
Donc là il suffit de tester si $(date +"%u") est supérieur ou égal (-ge) à 6 pour savoir qu'on est le week-end.
Bonne chance
Ben oui là c'est évalué dynamiquement à l'exécution ce qui évite d'avoir à passer un paramètre. Après rien ne t'empêche que ce soit un paramètre de ton script.
Je pensais plutôt à faire un shell où c'est à nous de rentrer les paramètres concernant le client et la vitesse demandée.
Si ton script est capable de les calculer pourquoi faire ? De plus il faut bien voir que tu vas instancier ton script depuis un cron à terme, donc il faudra bien à un moment définir ce paramètre. Ou alors il faut que ton cron instancie explicitement rsync avec les bons paramètres (en fonction de l'heure à laquelle le job est instancié).
Le tien serait extra en le bidouillant pour rentrer les différents paramètres lors du lancement. "./toto.sh client 80 40" vitesse de nuit et de jour.
Bah c'est trivial tu peux récupérer les valeurs client 80 et 40 respectivement dans $1, $2 et $3. Cf cours de shell.
Puis si on veut vraiment l'optimiser faudrait dire dans un cron que le samedi et dimanche, tu me le laisses en vitesse max.
Encore une fois c'est trivial. Tu vois que mon script récupère l'heure UTC avec la commande date. De la même manière tu peux demander à date de te retourner le jour, il faut juste l'instancier avec les bons paramètres.
man date
Exemple :
date +"%u"
(retourne 1 si on est lundi, 2 si on est mardi, etc...).
Donc là il suffit de tester si $(date +"%u") est supérieur ou égal (-ge) à 6 pour savoir qu'on est le week-end.
Bonne chance
A cause du week-end, je voyais pas trop comment configurer directement dans le shell en fait :/. Mais avec des "if" comme tu l'as montré c'est faisable.
Je te remercie.
J'ai essayé de faire une synchro' de mon pc à un autre du réseau avec une simple commande rsync ... ça marche pas..
J'ai pourtant essayé de suivre au mieux ce tuto : http://doc.ubuntu-fr.org/tutoriel/serveur_de_synchronisation_avec_rsync
J'ai juste changé les chemins concernant les répertoires, j'ai mis dans le desktop.
Il me met des erreurs concernant le code rsync et un "access denied" alors que je suis root (et même après avoir fait un chmod 777 sur le répertoire en question).
La commande rsync tantée est : "rsync -avze rsync@192.168.0.123::/home/user/Bureau" si mes souvenirs de ce matin sont bons ...
Je te remercie.
J'ai essayé de faire une synchro' de mon pc à un autre du réseau avec une simple commande rsync ... ça marche pas..
J'ai pourtant essayé de suivre au mieux ce tuto : http://doc.ubuntu-fr.org/tutoriel/serveur_de_synchronisation_avec_rsync
J'ai juste changé les chemins concernant les répertoires, j'ai mis dans le desktop.
Il me met des erreurs concernant le code rsync et un "access denied" alors que je suis root (et même après avoir fait un chmod 777 sur le répertoire en question).
La commande rsync tantée est : "rsync -avze rsync@192.168.0.123::/home/user/Bureau" si mes souvenirs de ce matin sont bons ...
Bah sans le script, le fichier cron, et le message d'erreur exacts c'est un peu compliqué de répondre... Est-ce que tu passes par crontab pour avoir des droits root ?
http://doc.ubuntu-fr.org/cron#autres_considerations
Déjà la question qu'il faut se poser c'est as-tu besoin d'être root ? Imaginons que toto puisse se connecter à rsync@192.168.0.123 et qu'il ait les droits pour écrire dans /home/toto/backup. Alors dans ce cas l'appel à ton script de backup peut se faire en tant que toto.
Je te conseille de lancer ton script à la main et de vérifier que tout marche en lançant ce script avec l'utilisateur qui sera employé à terme au niveau du cron.
Supposons que le script fasse ce qu'il faut (kill, paramétrage de la bande passante, ...) As-tu créé/installé une clé ssh comme je te l'ai indiqué ? Si oui, normalement tu dois arriver à lancer ta commande rsync sans avoir à taper de mots de passe. Note que si le script doit être lancé à terme par root, ton couple de clé doit être généré (ou déplacé) dans /root/.ssh.
Ensuite, dans le tutoriel que je t'ai indiqué la clé est protégée par une passphrase (ce qui est recommandé). Pour éviter d'avoir à retaper la passphrase après l'avoir saisi une première fois avec succès on utilise ssh-agent.
En pratique, quand tu te loggues en mode graphique par exemple en tant que toto, tu as généralement une instance de ssh-agent qui tourne (pour toto). Cela signifie que toto ne tape qu'une fois sa passphrase. La durée de vie de ssh-agent dans ce cas particulier est la durée de vie de sa session graphique (et elle ne concerne que toto).
En admettant que tu veuilles que ton script soit indépendant de ce genre de considération il faut soit ne pas protéger la clé par une passphrase (ce que je ne te recommande pas, car c'est pas secure, mais au moins c'est simple), soit se débrouiller pour avoir au préalable une instance de ssh-agent qui tourne un arrière plan et pour laquelle la clé ssh utilisée est déverrouillée.
Bonne chance
http://doc.ubuntu-fr.org/cron#autres_considerations
Déjà la question qu'il faut se poser c'est as-tu besoin d'être root ? Imaginons que toto puisse se connecter à rsync@192.168.0.123 et qu'il ait les droits pour écrire dans /home/toto/backup. Alors dans ce cas l'appel à ton script de backup peut se faire en tant que toto.
Je te conseille de lancer ton script à la main et de vérifier que tout marche en lançant ce script avec l'utilisateur qui sera employé à terme au niveau du cron.
Supposons que le script fasse ce qu'il faut (kill, paramétrage de la bande passante, ...) As-tu créé/installé une clé ssh comme je te l'ai indiqué ? Si oui, normalement tu dois arriver à lancer ta commande rsync sans avoir à taper de mots de passe. Note que si le script doit être lancé à terme par root, ton couple de clé doit être généré (ou déplacé) dans /root/.ssh.
Ensuite, dans le tutoriel que je t'ai indiqué la clé est protégée par une passphrase (ce qui est recommandé). Pour éviter d'avoir à retaper la passphrase après l'avoir saisi une première fois avec succès on utilise ssh-agent.
En pratique, quand tu te loggues en mode graphique par exemple en tant que toto, tu as généralement une instance de ssh-agent qui tourne (pour toto). Cela signifie que toto ne tape qu'une fois sa passphrase. La durée de vie de ssh-agent dans ce cas particulier est la durée de vie de sa session graphique (et elle ne concerne que toto).
En admettant que tu veuilles que ton script soit indépendant de ce genre de considération il faut soit ne pas protéger la clé par une passphrase (ce que je ne te recommande pas, car c'est pas secure, mais au moins c'est simple), soit se débrouiller pour avoir au préalable une instance de ssh-agent qui tourne un arrière plan et pour laquelle la clé ssh utilisée est déverrouillée.
Bonne chance
Je préfère le faire sans clé ssh. J'ai enfin réussi. Je vais test le script ane changeant la date pour voir la réaction. Je te remercie beaucoup pour ton aide !
Pour avoir test simplement sur un autre pc, ça a fonctionné. Le root, c'est pasque je suis sous backtrack et par habitude.
Voici le script, d'après toi, y'aura-t-il besoin d'un cron ?
-----------------------------
#!/bin/bash
#Choix du client
src=''/dossier/du/client/''
# Destination
dst_host="1.2.3.4"
dst_mod="module_du_client''
dst="$dst_host::$dst_mod"
#Si il y a un script Rsync.sh on le tue
for pid in $(ps aux | grep -v grep | grep $(basename $0))
do
kill -9 $pid
done
#Week-end ou non
# Selon l'heure, on définit ou non l'option bandwith
hour=$(date -u +"%H")
if [ date +`'%u'' -lt 6]
then
elif [ $hour -lt 20 ] && [ $hour -ge 8 ]
then
bw="--bandwith=40"
fi
#Lancement du transfert archivé, compressé et supprimant les dossiers n'existant plus chez le client
echo `' rsync -avz $bw --delete-after $src $dst
rsync -avz $bw --delete-after $src $dst
-------------------------------------------------------
Pour avoir test simplement sur un autre pc, ça a fonctionné. Le root, c'est pasque je suis sous backtrack et par habitude.
Voici le script, d'après toi, y'aura-t-il besoin d'un cron ?
-----------------------------
#!/bin/bash
#Choix du client
src=''/dossier/du/client/''
# Destination
dst_host="1.2.3.4"
dst_mod="module_du_client''
dst="$dst_host::$dst_mod"
#Si il y a un script Rsync.sh on le tue
for pid in $(ps aux | grep -v grep | grep $(basename $0))
do
kill -9 $pid
done
#Week-end ou non
# Selon l'heure, on définit ou non l'option bandwith
hour=$(date -u +"%H")
if [ date +`'%u'' -lt 6]
then
elif [ $hour -lt 20 ] && [ $hour -ge 8 ]
then
bw="--bandwith=40"
fi
#Lancement du transfert archivé, compressé et supprimant les dossiers n'existant plus chez le client
echo `' rsync -avz $bw --delete-after $src $dst
rsync -avz $bw --delete-after $src $dst
-------------------------------------------------------
script qui a de nouveau changé et qui m'a l'air fonctionnel, aller juste pour la plaisir des yeux :
#!/bin/bash
#Choix du client
src=''/dossier/du/client/''
# Destination
dst_host="1.2.3.4"
dst_mod="module_du_client''
dst="$dst_host::$dst_mod"
#Si il y a un script Rsync.sh on le tue
#for pid in $(ps aux | grep -v grep | grep $(basename $0))
#do
# kill -9 $pid
#done
#Week-end ou non
# Selon l'heure, on définit ou non l'option bandwith
hour=$(date -u +"%H")
if [ $(date +%u) -lt 6 ]
then
if [ $hour -lt 20 ] && [ $hour -ge 8 ]
then
bw=''--bwlimit=40''
fi
fi
#Lancement du transfert archivé, compressé et supprimant les dossiers n'existant plus chez le client
echo '' rsync -avz $bw --delete-after $src $dst''
rsync -avz $bw --delete-after $src $dst
exit 0
#!/bin/bash
#Choix du client
src=''/dossier/du/client/''
# Destination
dst_host="1.2.3.4"
dst_mod="module_du_client''
dst="$dst_host::$dst_mod"
#Si il y a un script Rsync.sh on le tue
#for pid in $(ps aux | grep -v grep | grep $(basename $0))
#do
# kill -9 $pid
#done
#Week-end ou non
# Selon l'heure, on définit ou non l'option bandwith
hour=$(date -u +"%H")
if [ $(date +%u) -lt 6 ]
then
if [ $hour -lt 20 ] && [ $hour -ge 8 ]
then
bw=''--bwlimit=40''
fi
fi
#Lancement du transfert archivé, compressé et supprimant les dossiers n'existant plus chez le client
echo '' rsync -avz $bw --delete-after $src $dst''
rsync -avz $bw --delete-after $src $dst
exit 0