
Eu tenho um script que aceita vários argumentos e preciso executá-lo em várias instâncias em paralelo na AWS. Por exemplo, para simplificar, se eu tiver três instâncias na AWS, gostaria de executar o seguinte:
On instance-a: script.sh a b
On instance-b: script.sh s t
On instance-c: script.sh y z
Estarei gerando as instâncias usando uma AMI que terá o tempo de execução (MATLAB) e o programa (usando o tempo de execução) instalados como parte da imagem.
Eu estava checandoesselink e vi Capistrano mencionado. Isso funcionará no meu caso? Alguma outra alternativa leve que possa ser explorada? Só para mencionar que precisarei do status de retorno e da saída (arquivo CSV) gerados em cada instância.
Responder1
Se você quiser apenas 3, isso funcionará (versão >= 20161222 para --results my.csv
funcionar):
parallel --results my.csv ssh {1} script.sh {2} {3} ::: instance-a instance-b instance-c :::+ a s y :::+ b t z
Mas deixe-me adivinhar: você tem muito mais instâncias listadas em um arquivo chamado hosts.txt
:
instance-a
instance-b
instance-c
Você não se importa com qual instância executa quais trabalhos - eles são apenas trabalhadores. Você tem um arquivo .tsv como input.tsv
:
a[tab]b
s[tab]t
y[tab]z
Então você executaria:
parallel --slf hosts.txt --results my.csv -a input.tsv --colsep '\t' script.sh
Se o seu comando retornar 0
com sucesso, você pode até mesmo executá-lo em servidores baratos do mercado spot: ao usá-lo, --retries 5
você pode pedir ao GNU Parallel para refazer o trabalho em outro servidor se um servidor quebrar (ou seja, retornar not 0
).