Execute vários scripts e continue até que cada script seja concluído

1

minha pergunta é, posso executar vários scripts de uma só vez. Eu tenho acesso a um cluster com 32 CPUs, mas ao mesmo tempo tenho 900 scripts. Agora, o que eu gostaria de fazer é colocar cada script em uma fila e, depois que um script terminar, inicie outro. Eu não estou tentando fazer um loop simples, já que eu quero que todos (ou quase todos) os cpus rodem em paralelo.

    
por Gasare 27.03.2015 / 21:00

2 respostas

2

Parece que você está procurando por algo como o utilitário GNU Parallel . Aqui está um trecho de sua descrição:

For each line of input GNU parallel will execute command with the line as arguments. If no command is given, the line of input is executed. Several lines will be run in parallel.

No seu caso, você se limitaria a 32 scripts simultâneos com algo como o seguinte:

parallel -j32 ::: ./script1 ./script2 (...) ./script900

Ou você pode fazer com que parallel leia os nomes dos scripts de um arquivo, ou se todas as execuções forem instâncias do mesmo script, armazene apenas os parâmetros em um arquivo de entrada, etc .; leia a documentação para muitas variações possíveis.

    
por 27.03.2015 / 21:02
0

O que acontece se você chutar todos os scripts no diretório usando:

for FILE in *.sh; do ./$FILE & done;

E deixe o agendador de processos fazer o trabalho.

    
por 27.03.2015 / 21:21