Inicio > Linux, Programación > Repitiendo una tarea “hasta que funcione” en Bash

Repitiendo una tarea “hasta que funcione” en Bash


blank_computer_screen

Desde hace unos días debo actualizar una carpeta determinada de una gran cantidad de máquinas, y por diversos motivos no puedo recurrir a rsync u otros métodos quedándome solo ssh.

Por ello me hice un pequeño script:

PWD=`pwd`

IPS='20 25 30 35 40 45'

for IP in $IPS;
 do
 echo "Actualizando $IP"
 scp -r $PWD/carpeta root@192.168.2.$IP:/home/user/carpeta
 done

Inicialmente parecía funcionar bien, pero si la red era inestable la conexión ssh se cerraba sin más con el siguiente error:

Received disconnect from xxx.xxx.xxx.xxx: 2: Packet corrupt

Y pasaba a la siguiente máquina y en muchos casos me quedaba sin saber si se había actualizado correctamente.

Tras buscar un poco, me encontré con el bucle until que me permitía reintentar hasta que se completase toda la transferencia

PWD=`pwd`

IPS='20 25 30 35 40 45'

for IP in $IPS;
 do
 echo "Actualizando $IP"
  until scp -r $PWD/carpeta root@192.168.2.$IP:/home/user/carpeta
  do
    echo "Error al actualizar $IP, reintentando"
  done
 done

Y listo, ahí se queda hasta que consiga actualizar correctamente.

Soy consciente de que algún tipo de contador de máximos intentos hubiese quedado mejor, pero bueno.

Anuncios
Categorías:Linux, Programación Etiquetas: , , , ,
  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: