Archivi tag: mirroring

lftp: mirroring di un sito remoto da CLI

Supponiamo che vi sia la necessità di trasferire il contenuto di un sito Web su un altro sito Web autorizzato (tale pratica, in gergo, prende il nome di mirroring). Supponiamo, inoltre, che il task in questione debba essere automatizzato tramite un cronjob oppure uno scheduled task di Windows. Cosa fare dunque? Semplice, iniziare ad utilizzare lftp.

lftp

Il suddetto tool è dotato di una console integrata, che può essere richiamata digitando semplicemente lftp, ad esempio:

[root@linux ~]# lftp
lftp :~>

Nel caso in cui si volesse creare un task automatico, sconsiglio fortemente l’uso della console in questione (a meno di tool esterni, quali expect, in grado di interagire con essa), e raccomando di avvalersi dell’opzione -e, grazie alla quale i comandi lftp possono essere inviati direttamente da CLI, ad esempio:

lftp -u vostrouser,vostrapassword sitodamirrorare -e 'set ftp:use-feat off; set ftp:ssl-allow off; mirror -c / ../sitemirrored; exit'

Nella fattispecie, ho disabilitato l’invio del comando FEAT (ftp:use-feat off) ed ho inibito qualsiasi tentativo di connessione tramite FTPS (ftp:ssl-allow off). Inoltre, ho inizializzato il mirroring (comprensivo di resume in caso di disconnessione, grazie all’opzione -c che sta per –continue), specificando la directory sorgente (in questo caso /) e quella di destinazione (../sitemirrored).

Attenzione: se state utilizzando la versione Windows di lftp, consiglio di copiare l’eseguibile nella stessa unità in cui si trova la dir di destinazione, in quanto ho riscontrato diversi problemi relativi all’attraversamento delle directory.

Una volta completato il mirroring del sito, è possibile effettuare la stessa operazione in modo incrementale, ovvero “copiando” solo ed esclusivamente i nuovi file (quelli che non presenti durante la prima tornata). Il comando da utilizzare è il seguente:

lftp -u vostrouser,vostrapassword sitodamirrorare -e 'set ftp:use-feat off; set ftp:ssl-allow off; mirror -n / ../sitemirrored; exit'

dove l’opzione -n sta per –only-newer.

Non ci resta che creare il cronjob (o lo scheduled task) ed abbiamo finito.

Alla prossima.

lftp: script bash per verificare l’esistenza di una directory remota

Lftp rappresenta un utilissimo strumento per effettuare il mirroring (e non solo) di una o più directory remote.

mirror.jpg

Spulciando la manpage del suddetto tool ho notato che non esiste alcuna opzione in grado di verificare l’esistenza di una directory remota prima di inizializzare il mirroring. Proprio per questo motivo, ho deciso di realizzare il seguente scrip:

#!/bin/bash
HOST="hostname.ftpserver.com"
USER="username"
PASS="password"
LCD="/home/nightfly/prova"
RCD="/prova"

if [ ! -d $LCD ]; then
mkdir $LCD;
fi

date

lftp -c "set ftp:list-options -a;
set cmd:interactive;
open ftp://$USER:$PASS@$HOST;
lcd $LCD;
ls > /var/log/check;
quit"

if grep -q "prova" /var/log/check
        then
        lftp -c "set ftp:list-options -a;
        open ftp://$USER:$PASS@$HOST;
        lcd $LCD;
        cd $RCD;
        mirror -p -nvvv;
        quit;"
else
        cat /dev/null > /var/log/check
        exit 0
fi

In particolare, viene lanciata una prima sessione FTP che ha come unico scopo quello di listare il contenuto della root (/) remota, salvandolo in un apposito file di testo.

Successivamente, se tale file contiene la directory remota target, viene avviato il mirroring vero a proprio, altrimenti viene svuotato e lo scrip esce.

Alla prossima.