• Publicidad

Utilizar rsync con Perl

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Utilizar rsync con Perl

Notapor erjuak » 2014-02-05 04:56 @247

Hola,
Me gustaría hacer un script para hacer backups con rsync.

La historia es que me gustaría hacerlo de una nueva forma, intentando el tener que hacer el system("rsync...").
He estado mirando en CPAN y veo que hay algunos módulos que utilizan rsync, y la verdad no me entero muy bien cómo van y cómo funcionan.

¿Alguien me podría dar alguna orientación, sobre un módulo, o alguna forma más fácil de hacerlo?

Muchas gracias, y un saludo.
erjuak
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2013-03-07 11:52 @536

Publicidad

Re: Utilizar rsync con Perl

Notapor explorer » 2014-02-05 09:59 @458

La forma más sencilla es ejecutando un system().

Como dices que quieres usar un system(), te vale con poner en él lo que ejecutarías si estuvieras en la línea de comandos.

Yo, por ejemplo, no tengo un programa Perl para hacer las copias, sino que me vale con poner las siguientes líneas en un script bash:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. #!/bin/bash
  2.  
  3. cd /var/home || exit
  4.  
  5. rsync -avz --skip-compress="zip,tgz,gz,bz2" --del -e ssh --bwlimit=5000 root@....net:/var/home/ .
Coloreado en 0.008 segundos, usando GeSHi 1.0.8.4
Entre las máquinas origen y destino, he intercambiado anteriormente claves públicas, para que el protocolo ssh se ejecute sin que pide usuarios/contraseñas.

Lo que hace el script es entrar primero en el directorio /var/home local. Si no puede (por cualquier razón), termina el script inmediatamente. Luego arranca el rsync, con una serie de opciones, que son:
  • -a: activa el modo "archivo" que equivale a activar las opciones -rlptgoD, que son:
    • -r: recursivo
    • -l: copia los enlaces simbólicos como enlaces simbólicos
    • -p: preserva los permisos
    • -t: preserva los tiempos de modificación de los archivos
    • -g: preserva el grupo
    • -o: preserva el usuario
    • -D: lo mismo que activar las opciones --devices (preserva los archivos de dispositivos) y --specials (preserva los archivos especiales)
  • -v: aumenta la verbosidad
  • -z: comprime los datos mientras los transfiere
  • --skip-compress="zip,tgz,gz,bz2": extensiones de los archivos que no serán comprimidos
  • --del: lo mismo que --delete-during: se borran los archivos en el destino durante la transferencia
  • -e ssh: especifica el comando remoto a ejecutar
  • --bwlimit=5000: limita el ancho de banda a transferir a 5 MB/s
  • [email protected]:/var/home/ :nombre de usuario, servidor remoto y ruta remota. La barra final es importante
  • . : ruta destino (en este caso, el directorio padre, que es lo mismo que decir, "aquí mismo")
Lo que hace rsync es conectarse al servidor remoto y sincronizar los archivos remotos con los locales. Si algún archivo remoto ha desaparecido desde la última vez, también será borrado en local.

Hay otras formas de trabajar con rsync. Por ejemplo, haciéndolo correr como dæmon en una de las máquinas, y conectarse a él desde la otra máquina, como un cliente.

No he visto los módulos de Perl en CPAN, pero seguro que serán para simplificar un poco el manejo o para aplicarlo a un caso concreto de copia.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Utilizar rsync con Perl

Notapor erjuak » 2014-02-05 10:17 @470

Hola, explorer.

Gracias por contestarme.

Me he confundido al escribir y no me he expresado bien.

Lo que quería era evitar hacer el system() en mi script, ya que pensaba que habría algún módulo que te facilitara la sincronización de una manera más "efectiva", cuando programo en Perl, intento evitar lanzar comandos del S.O. a pelo con el system().

La verdad que la información que me facilitas sobre el rsync, es bastante completa, por lo que te lo agradezco. De todas formas, voy a evitar utilizar hacer el rsync, utilizando el ssh, ya que voy hacer la copia de los ficheros en una red local, por tanto lo voy a montar todo por NFS, por lo que lanzaré el rsync de una forma "local".

Así que bueno, lanzaremos el rsync, con el system() si no queda más remedio.

Muchas gracias por tu respuesta.
erjuak
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2013-03-07 11:52 @536

Re: Utilizar rsync con Perl

Notapor explorer » 2014-02-05 14:46 @657

Pero, no es nada dramático tener que usar un comando externo con la ayuda de system(). Hay muchos módulos en CPAN que usan ese método, y te esconden la dificultad de las opciones al comando por medio de una envoltura más facilona. Pero siguen llamando al comando con un system().

Aquí, en estos foros, se insiste en que es mejor no llamar a system(), pero esto lo decimos cuando vemos que el usuario llama a comandos como grep, cut, paste, fmt, etc. Estos comandos son típicos de un sistema Unix, pero no vienen por defecto en Windows, y por eso insistimos que no cuesta mucho sustituirles por las funciones propias de Perl, y así el programa puede funcionar en más sistemas operativos.

Otra cosa distinta es el comando rsync. Es un comando lo suficientemente especializado como para presumir que sí nos vamos a asegurar de que estará instalado en el sistema operativo, antes de ejecutar nuestro programa.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Utilizar rsync con Perl

Notapor salva » 2014-02-12 06:17 @303

Net::OpenSSH tiene soporte para copiar ficheros con rsync y en mi (poco objetiva) opinión es bastante fácil de utilizar.

La gran ventaja de usar rsync es que no necesita traerse todos los datos por la red para comparar los ficheros locales con los remotos pero si los datos están en local (aunque sea a traves de NFS) esa ventaja se pierde.
Avatar de Usuario
salva
Perlero nuevo
Perlero nuevo
 
Mensajes: 200
Registrado: 2008-01-03 15:19 @680


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado