Synchronisation lftp

Cette page décrit comment synchroniser un répertoire avec lftp.

Installation

Installer le paquet lftp.

Configuration

lftp ne nécessite pas de configuration mais il est possible de simplifier son utilisation avec des bookmark.

Utilisation : bookmark [SOUS-COMMANDE]
La commande bookmark contrôle les signets

Les sous-commandes suivantes sont valides :
  add <nom> [<url>]  - ajoute l'url en cours ou l'url indiquée aux signets
                       et l'associe au nom donné
  del <nom>          - supprime le signet
  edit               - démarre l'éditeur de signets
  import <type>      - importe un fichier de signets externe
  list               - affiche les signets (par défaut)

exemple :

lftp :/> bookmark add site.com ftp://user:pass@ftp.site.com
lftp :/> bookmark list
site.com                        ftp://user:XXXX@ftp.site.com
lftp :/>

Il est ensuite possible d'utiliser ces bookmark avec la commande “connect” ou directement à partir de la ligne de commande :

lftp site.com

Synchronisation manuelle

Avant d'automatiser toute synchronisation, il est conseillé de faire quelques tests manuellement.
:!: En cas d'erreur, le risque est de supprimer l'ensemble des fichiers sources.

La synchronisation est réalisée avec la commande mirror :

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.

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 :

connect nas
mirror /Data/Photos /data/transfert/photos -v --log /var/log/lftp/download_nas --parallel=10 --no-perms -e

Il suffit ensuite d'exécuter le script avec l'option -f de lftp.

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 :

  1. le copier dans un fichier
  2. modifier NAME à votre convenance
  3. modifier le lien vers le scripts lftp dans DAEMON_OPTS
  4. 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 :

#!/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
linux/synchro_lftp.txt · Dernière modification: 2011/01/11 23:50 par matthieu
Recent changes RSS feed Debian Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki