Ejecución paralela del script sh en múltiples servidores

Ejecución paralela del script sh en múltiples servidores

Estoy intentando ejecutar acciones en varios servidores en mi bucle, pero me gustaría iniciar mis acciones en el primer servidor e ir directamente al segundo sin esperar a que finalice el primero.

HOSTS="host1 host2"
    For hostname in ${HOST} ;
do ssh -tt ${USERNAME}@${hostname} << EOF
actions
exit
EOF
Done 

¿Alguien tiene una idea de cómo hacer eso en Linux sh bash?

Gracias de antemano.

Respuesta1

pdshparecería satisfacer sus necesidades. Ejecuta conexiones ssh en paralelo, en forma de múltiples subprocesos.

Ejemplo:

$ pdsh -w 192.168.1.4,192.168.1.250 uname -r
192.168.1.4: 2.6.32-431.17.1.el6.x86_64
192.168.1.250: 2.6.32-431.11.2.el6.x86_64
$

Shell paralelo con pdsh

¿Cómo puedo enviar un solo archivo a varios sitios remotos al mismo tiempo?

Respuesta2

Utilice GNU paralelo:

parallel -S host1,host2 --nonall uname -a

Si la tarea es más compleja, haz una función:

do_actions() {
   action
   packed
   function
}
export -f do_actions
HOSTS="host1,host2"
parallel -S $HOSTS --ssh 'ssh -l '$USERNAME --nonall --env do_actions do_actions

Si el nombre de usuario es el mismo whoamientonces esto es suficiente:

parallel -S $HOSTS --nonall --env do_actions do_actions

GNU Parallel no tiene que estar instalado globalmente: si no está instalado puedes hacer una instalación personal.

wget pi.dk/3
bash 3

información relacionada