processamento paralelo usando xargs

1

Como executar um script bash em paralelo para cada linha? Na verdade, eu vou estar seguindo para o arquivo de log e para cada linha encontrada, eu quero executar script em segundo plano algo como abaixo:

tailf logfile.log | grep 'patternline' | while read line ; do 
    bash scriptname.sh "$line" & ; 
done

Eu gostaria de saber como executar acima usando xargs (OU qualquer outro método adequado) paralelamente e também como limitar processos.

Obrigado antecipadamente.

    
por AVJ 21.06.2016 / 12:51

2 respostas

1

Você gostaria de ler o manual xargs e procurar os sinalizadores -L e -P lá.

tail -f logfile.log | grep 'patternline' |
xargs -P 4 -L 1 bash scriptname.sh

Isso executará no máximo quatro instâncias do comando por vez ( -P 4 ) e com uma linha de entrada para cada chamada ( -L 1 ).

Adicione -t a xargs para ver o que é executado.

    
por 21.06.2016 / 13:20
0

O GNU Parallel fará a citação do argumento corretamente para você:

tail -f logfile.log | grep 'patternline' | parallel bash scriptname.sh

Além disso, o padrão será 1 processo por núcleo da CPU e garantirá que a saída de dois trabalhos paralelos não seja misturada.

O GNU Parallel é um paralelizador geral e facilita a execução de trabalhos em paralelo na mesma máquina ou em várias máquinas para as quais você tem acesso ssh. Muitas vezes, pode substituir um loop for .

Se você tem 32 tarefas diferentes que você quer rodar em 4 CPUs, uma forma direta de paralelizar é rodar 8 tarefas em cada processador:

O

GNUParallelgeraumnovoprocessoquandoumtermina-mantendoasCPUsativaseeconomizandotempo:

Instalação

Se o GNU Parallel não for empacotado para sua distribuição, você poderá fazer uma instalação pessoal, que não requer acesso root. Isso pode ser feito em 10 segundos ao fazer isso:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

Para outras opções de instalação, consulte o link

Saiba mais

Veja mais exemplos: link

Assista aos vídeos de introdução: link

Percorra o tutorial: link

Inscreva-se na lista de e-mail para obter suporte: link

    
por 24.06.2016 / 23:50