13:03 (30-05-2012)

Sincronizacion automatica de folder local con un Servidor FTP (Reverse Mirror)

Enviar a Twitter Enviar a Facebook Compartir en Questionity

image Gracias a la posibilidad de crear scripts en Bash muchas tareas que requieren cierta recurrencia, pero que en cada iteración el proceso se repite de la misma forma, aunque muchas otras no, se hacen mucho más fácil de ejecutar. También crear un script nos da la posibildiad de ejecutar una tarea que requiere el uso de varios comandos y opciones difíciles de memorizar. Bash nos permite mediante scripts hacer dichas tareas de forma transparente para el usuario común, pero le da al Sys Admin grandes ventajas y ahorro de tiempo.

Un trabajito que he tenido últimamente ha sido editar unos archivos de audio y subirlos a un hosting para luego ser publicados en un sitio web en modalidad de podcasts. Luego de editarlos (en Audacity) tengo que loguearme en la página del hosting, buscar el explorador de archivos y subir uno a uno los archivos de audio (que a veces son dos o tres) pero que van de 35 a 50 MB's.

Bueno, en fin, esto es aplicable a cualquier situación similar sin importar la cantidad o el tamaño de los archivos.

La finalidad de esto es ilustrar mediante un script la automatización de este proceso. Ya existen varias aplicaciones gráficas que hacen esta tarea como son FileZilla (multiplataforma) o SmartFTP (para Windows).

Manos a la obra...

Lo primero que haremos es comprobar que el proceso funciona de forma manual, es decir comando a comando en el terminal. El comando lftp (Sophisticated file transfer program) lo usaremos como el cliente FTP desde el cual nos conectaremos al servidor y haremos el trabajo.

Asumiremos que el folder local está ubicado en $HOME/audio, es decir /home/fraterneo/audio o ~/audio. Más adelante veremos por qué considero estas formas de referirme al folder local. Por otro lado el servidor FTP está en la dirección 192.168.24.101, en donde se tiene un usuario de nombre igual: fraterneo.

Conectándonos con el servidor con lftp:

fraterneo@rainbow:~$ lftp fraterneo@192.168.24.101 Password: lftp fraterneo@192.168.24.101:/>

Para verificar que la conexión fue correcta entramos algún comando:

lftp fraterneo@192.168.24.101:/> ls drwxrwxrwx 2 1582064 15000 4096 Apr 10 2011 audio

De no estar correctamente conectados, aparecerá un error como el siguiente:

lftp fraterneo@192.168.24.101:/> ls ls: Login failed: 530 Login incorrect. lftp fraterneo@192.168.24.101:/>

En el entendido de que todo salió bien, continuamos. Dentro del servidor FTP nos entramos al folder que va a ser sincronizado con nuestro folder local:

lftp fraterneo@192.168.24.101:/> cd audio/ lftp fraterneo@192.168.24.101:/audio>

Ahora desde el mismo servidor FTP con el comando lcd entramos al directorio local. Y finalmente iniciamos la sincronización con el comando mirror -Rn.

Lftp fraterneo@192.168.24.101:/audio> lcd /home/fraterneo/audio

lcd ok, local cwd=/home/fraterneo/audio lftp fraterneo@192.168.24.101:/audio> mirror -Rn `audio01-octurbe.mp3' at 1488399 (33%) 89.7K/s eta:45s [Sending data]

Luego de finalizada la transferencia de todos los archivos se nos informa lo siguiente:

lftp fraterneo@192.168.24.101:/audio> Total: 2 directories, 2 files, 0 symlinks New: 2 files, 0 symlinks 7484394 bytes transferred in 86 seconds (85.0K/s)

Listo! El proceso funciona perfectamente de forma manual.

Nota: Para este ejemplo de sincronización no he utilizado la opción -e en el comando mirror, la cual nos permite borrar los archivos no existentes en el origen, debido a la opción -R que hace que sea un reverse mirror, y -n solo copia los archivos no existentes en el destino.

Finalmente ya podemos crear el script de bash. Tendremos entonces dos ficheros, uno será el script en sí mismo y el otro contendrá los comandos de lftp para ser ejecutados secuencialmente. Esto hace el script más portable para otros usuarios.

Fichero ftpmirrorsync.lftp

fraterneo@rainbow:~$ nano ftpmirrorsync.lftp

open -ufraterneo, AdminFtP9138 192.168.24.101

cd audio

lcd ~/audio

mirror -Rn

Como podemos observar he utilizado la tilde de expansión (~) para referirme al directorio home del usuario actual (/home/fraterneo).

Fichero ftpmirrorsync.sh

fraterneo@rainbow:~$ nano ftpmirrorsync.sh

#!/bin/bash

LFTPSCRIPT="~/ftpmirrorsync.lftp"

lftp -f $LFTPSCRIPT

Ahora vemos la utilidad de la tilde de expansión en la definición de la variable LFTPSCRIPT. Con la opción -f de lftp le indicamos que use el fichero cuyo camino se guarda en la variable.

Le otorgamos permisos de ejecución al script:

fraterneo@rainbow:~$ sudo chmod u+x ftpmirrorsync.sh

Ahora podemos agregar un job en /etc/crontab para ejecutar dicho script según nos convenga. También podemos copiarlo al folder /etc/cron.daily, /etc/cron.weekly, etc, etc, según querramos. Otra opción idónea sería instalar gnome-schedule, que maneja los jobs tipo crontab.

Añade tu comentario

Comentarios de Sincronizacion automatica de folder local con un Servidor FTP (Reverse Mirror)

Nombre: (opcional)
Añade tu comentario:
Inserta el código de verificación:
 
 

Sobre esta noticia

Autor: Claudio Concepción Certad (472 noticias)

Fuente: fraterneo.blogspot.com

Visitas de esta noticia: 360

Tipo: Reportaje

Esta noticia se publica con licencia: Creative Commons License

Regístrate en Globedia