Execução paralela de script sh em vários servidores

Execução paralela de script sh em vários servidores

Estou tentando executar ações em vários servidores em meu loop, mas gostaria de iniciar minhas ações no primeiro servidor e ir diretamente para o segundo sem esperar a conclusão do primeiro.

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

Alguém tem uma ideia de como fazer isso no linux sh bash?

Agradeço antecipadamente.

Responder1

pdshparece atender às suas necessidades. Executa conexões ssh em paralelo, de maneira multithread.

Exemplo:

$ 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 com pdsh

Como posso enviar um único arquivo para vários sites remotos ao mesmo tempo?

Responder2

Use GNU Paralelo:

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

Se a tarefa for mais complexa, faça uma função:

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

Se o nome de usuário for igual, whoamiisso é suficiente:

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

GNU Parallel não precisa ser instalado globalmente: Se não for instalado, você pode fazer uma instalação pessoal.

wget pi.dk/3
bash 3

informação relacionada