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
pdsh
parece 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
$
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, whoami
isso é 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