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
pdsh
parecerí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
$
¿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 whoami
entonces 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