Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
linux:synchro_lftp [2010/03/06 09:13] matthieu créée |
linux:synchro_lftp [2011/01/11 23:50] (Version actuelle) matthieu |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag>fr fr:linux fr:transfert_de_fichier fr:sauvegarde}} | ||
====== Synchronisation lftp ====== | ====== Synchronisation lftp ====== | ||
Ligne 38: | Ligne 39: | ||
:!: En cas d'erreur, le risque est de supprimer l'ensemble des fichiers sources. | :!: En cas d'erreur, le risque est de supprimer l'ensemble des fichiers sources. | ||
+ | La synchronisation est réalisée avec la commande mirror : | ||
+ | <code> | ||
+ | lftp matthieu@gandalf.bouthors.fr:/> help mirror | ||
+ | Utilisation : mirror [OPTS] [distant [local]] | ||
+ | Duplique le répertoire distant spécifié vers le répertoire local | ||
+ | -c, --continue continue, si c'est possible, un travail de duplication | ||
+ | -e, --delete efface les fichiers absents sur le site distant | ||
+ | --delete-first efface les anciens fichiers avant d'en transférer de nouveaux | ||
+ | -s, --allow-suid duplique aussi les bits suid/sgid | ||
+ | --allow-chown essaye de dupliquer aussi les propriétaires | ||
+ | --ignore-time ignore l'heure pour décider ou non du téléchargement | ||
+ | -n, --only-newer télécharge uniquement les nouveaux fichiers | ||
+ | -r, --no-recursion n'entre pas dans les sous-répertoires | ||
+ | -p, --no-perms ne définit pas les permissions de fichier | ||
+ | --no-umask n'applique pas umask aux modes de fichier | ||
+ | -R, --reverse duplication inversée (émet les fichiers) | ||
+ | -L, --dereference télécharge les liens symboliques comme des fichiers | ||
+ | -N, --newer-than=SPEC télécharge uniquement les fichiers plus jeunes que | ||
+ | la date et l'heure spécifiées par SPEC | ||
+ | -P, --parallel[=N] télécharge N fichiers en parallèle | ||
+ | -i RX, --include RX inclut les fichiers correspondant à RX | ||
+ | -x RX, --exclude RX exclut les fichiers correspondant à RX | ||
+ | RX est une expression régulière étendue | ||
+ | -v, --verbose[=N] mode volubile | ||
+ | --log=FILE écrit dans FILE les commandes exécutées par lftp | ||
+ | --script=FILE écrit dans FILE les commandes à exécuter par lftp | ||
+ | mais ne les exécute pas. | ||
+ | --just-print, --dry-run identique à --script=- | ||
+ | |||
+ | Lorsque vous utilisez -R, le premier répertoire est local et le second est | ||
+ | distant. Si le second répertoire est omis, le nom de base du premier est | ||
+ | utilisé. Si les deux répertoires sont omis, les répertoires courants local | ||
+ | et distant sont utilisés. | ||
+ | </code> | ||
+ | |||
+ | Il est fortement recommandé d'utiliser l'option --dry-run pour les essais. | ||
+ | |||
+ | Voici un exemple de synchronisation par download : | ||
+ | mirror /Data/Photos /data/transfert/photos -v --log /var/log/lftp/download_nas --parallel=10 --no-perms -e | ||
+ | |||
+ | * /Data/Photos est la source située sur le serveur distant | ||
+ | * /data/transfert/photos est la cible locale | ||
+ | * -v rend lftp plus verbeux | ||
+ | * --log indique dans quel fichier inscrire les logs, attention ce fichier est écrasé à chaque exécution et n'indique pas le résultat des dry-run | ||
+ | * --parallel indique le nombre de transferts en parallèle, pratique pour les fichiers de petite taille | ||
+ | * --no-perms ne synchronise pas les permissions | ||
+ | * -e supprime dans le répertoire cible les fichiers absents de la source | ||
+ | |||
+ | Voici un exemple de synchronisation en upload : | ||
+ | mirror -R /space/Videos/ /data/videos/ --ignore-time --no-perms -e -v | ||
+ | |||
+ | * -R indique une synchronisation inverse (upload) | ||
+ | * /space/Videos/ est la source locale à transférer | ||
+ | * /data/videos/ est la cible située sur le serveur distant | ||
+ | * --ignore-time indique de ne pas utiliser la date et l'heure des fichiers pour identifier si un transfert est nécessaire (seule la taille est utilisée) | ||
+ | * --no-perms indique de ne pas synchroniser les permissions | ||
+ | * -e supprime dans le répertoire cible les fichiers absents de la source | ||
+ | * -v rend lftp plus verbeux | ||
+ | |||
+ | En upload, il n'est pas possible de modifier l'heure des fichiers destinations et souvent les permissions également, c'est pourquoi il est recommander de les désactiver. | ||
+ | |||
+ | Lorsque la commande désirée est finalisée, il est possible de la copier dans un fichier pour faire un script lftp. | ||
+ | |||
+ | Par exemple : | ||
+ | <file> | ||
+ | connect nas | ||
+ | mirror /Data/Photos /data/transfert/photos -v --log /var/log/lftp/download_nas --parallel=10 --no-perms -e | ||
+ | </file> | ||
+ | |||
+ | Il suffit ensuite d'exécuter le script avec l'option -f de lftp. | ||
===== Synchronisation automatisée par script ===== | ===== Synchronisation automatisée par script ===== | ||
+ | Pour automatiser cela, voici un petit script qui exécute un fichier de commande lftp.\\ | ||
+ | Ce script exécute lftp en tâche de fond comme un daemon et permet de l'arrêter ou le redémarrer. | ||
+ | |||
+ | Pour utiliser le script, il faut : | ||
+ | - le copier dans un fichier | ||
+ | - modifier NAME à votre convenance | ||
+ | - modifier le lien vers le scripts lftp dans DAEMON_OPTS | ||
+ | - rendre le fichier exécutable | ||
+ | |||
+ | Ce script dispose des options suivantes : | ||
+ | * start : démarre la synchro | ||
+ | * stop : arrête le process lftp | ||
+ | * restart : arrête puis redémarre la synchro | ||
+ | * check : indique si le process est toujours en cours | ||
+ | |||
+ | Script : | ||
+ | <file> | ||
+ | #!/bin/sh | ||
+ | |||
+ | # lftp synchronization script by Matthieu Bouthors | ||
+ | # http://www.bouthors.fr | ||
+ | |||
+ | # Change NAME and DAEMON_OPTS before use | ||
+ | set -e | ||
+ | |||
+ | # Must be a valid filename | ||
+ | NAME=lftp_synchro | ||
+ | PIDFILE=/var/run/$NAME.pid | ||
+ | #This is the command to be run, give the full pathname | ||
+ | DAEMON=/usr/bin/lftp | ||
+ | DAEMON_OPTS="-f /chemin/vers/cmd.lftp" | ||
+ | |||
+ | export PATH="${PATH:+$PATH:}/usr/sbin:/sbin" | ||
+ | |||
+ | # check if lftp is running | ||
+ | |||
+ | RUNNING=false | ||
+ | if [ -e $PIDFILE ] | ||
+ | then | ||
+ | currentpid=`cat $PIDFILE` | ||
+ | if `ps -p $currentpid > /dev/null` | ||
+ | then | ||
+ | RUNNING=true | ||
+ | else | ||
+ | rm -f $PIDFILE | ||
+ | fi | ||
+ | fi | ||
+ | |||
+ | case "$1" in | ||
+ | start) | ||
+ | date | ||
+ | if $RUNNING | ||
+ | then | ||
+ | started=`date -r $PIDFILE` | ||
+ | echo "daemon $NAME already started since $started, you need to stop it first" | ||
+ | else | ||
+ | echo -n "Starting daemon: "$NAME | ||
+ | start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $DAEMON -- $DAEMON_OPTS | ||
+ | echo "." | ||
+ | fi | ||
+ | ;; | ||
+ | stop) | ||
+ | date | ||
+ | echo -n "Stopping daemon: "$NAME | ||
+ | start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE | ||
+ | rm -f $PIDFILE | ||
+ | echo "." | ||
+ | ;; | ||
+ | restart) | ||
+ | date | ||
+ | echo -n "Restarting daemon: "$NAME | ||
+ | if $RUNNING | ||
+ | then | ||
+ | start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $PIDFILE | ||
+ | rm -f $PIDFILE | ||
+ | fi | ||
+ | start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $DAEMON -- $DAEMON_OPTS | ||
+ | echo "." | ||
+ | ;; | ||
+ | check) | ||
+ | if $RUNNING | ||
+ | then | ||
+ | echo "$NAME is running" | ||
+ | else | ||
+ | echo "$NAME is not running" | ||
+ | fi | ||
+ | ;; | ||
+ | |||
+ | *) | ||
+ | echo "Usage: "$1" {start|stop|restart|check}" | ||
+ | exit 1 | ||
+ | esac | ||
+ | exit 0 | ||
+ | </file> |