Muitos comandos SSH simultâneos em um script bash?

2

Meu Bash-Foo não é strong. Agora eu tenho algo parecido com

function update_project {
  for i in server-{1,2,3,4} ; do
    echo "Updating $i"
    ssh $i "git pull"
  done
}

O número de servidores está crescendo a cada dia e, como cada atualização leva cerca de 20 segundos, eu gostaria de fazer as solicitações simultaneamente. Qual é a melhor maneira de fazer isso, enquanto ainda pode ver a saída (por exemplo, fusões com falhas)?

    
por linkedlinked 27.06.2010 / 01:45

5 respostas

2

Por que você está tentando reinventar a roda? Basta usar o Capistrano para implantar o código do seu projeto. Ele foi projetado exatamente para essa finalidade e executa as implementações em paralelo em todas as máquinas configuradas.

    
por 27.06.2010 / 01:54
2

func lhe permitirá enviar um comando para um número arbitrário de máquinas e permitir que você assista a saída.

    
por 27.06.2010 / 01:52
1

Existem vários projetos ssh paralelos. Procure por pssh.

    
por 27.06.2010 / 02:17
1

Uma das outras respostas é a coisa certa a fazer, mas para responder diretamente à sua pergunta, basta adicionar um e comercial ao final do seu comando:

ssh $i "git pull" &
    
por 27.06.2010 / 02:22
0

Se você tem o link do GNU Paralelo instalado, você pode fazer isso:

parallel --slf hostfile --nonall --tag git pull

Você pode instalar o GNU Parallel simplesmente por:

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

Assista aos vídeos de introdução do GNU Parallel para saber mais: link

    
por 19.05.2012 / 13:51