Como executar um script em várias instâncias? (Servidor Ubuntu)

1

Como posso executar um script em várias instâncias no servidor Ubuntu?

Por exemplo, tenho um script de longa execução chamado scanner.sh colocado em /usr/bin/ , que desejo executar o script em 10 instâncias paralelas. Como posso iniciar as tarefas paralelas (e passar diferentes flags / opções / parâmetros para elas)?

e como posso parar as instâncias?

    
por Raptor 03.10.2014 / 16:36

4 respostas

1
#**parallel_scaller.sh**
# Script to async run scanner.sh
# USAGE: $> bash parallel_scanner.sh "FLAGS FOR INSTANCE 1" ... "FLAGS FOR INSTANCES 10"
$1='echo $1 | sed 's/"//g''
$2='echo $1 | sed 's/"//g''
$3='echo $1 | sed 's/"//g''
$4='echo $1 | sed 's/"//g''
$5='echo $1 | sed 's/"//g''
$6='echo $1 | sed 's/"//g''
$7='echo $1 | sed 's/"//g''
$8='echo $1 | sed 's/"//g''
$9='echo $1 | sed 's/"//g''
$10='echo $1 | sed 's/"//g''

bash scanner& $1 2>&1
bash scanner& $2 2>&1
bash scanner& $3 2>&1
bash scanner& $4 2>&1 
bash scanner& $5 2>&1
bash scanner& $6 2>&1
bash scanner& $7 2>&1
bash scanner& $8 2>&1
bash scanner& $9 2>&1
bash scanner& $10 2>&1

& coloca a tarefa em segundo plano. 2 > & 1 redireciona STDOUT para STDERR.

Para finalizar os processos, digite:

$> ps aux | grep scanner
$> kill $PIDS
    
por 03.10.2014 / 16:49
1

Usando o GNU Parallel, é assim:

parallel scanner {} ::: "--flags --for --instance 1" "--for 2" "--for 3"

Isso gerará um trabalho por CPU. Para parar, basta pressionar CTRL-C.

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 12.09.2015 / 17:14
0

Eu gostaria de propor que você comece a usar o sistema de gerenciamento de configurações como, preferivelmente Ansible.

Ele é escrito em Python, muito fácil de usar para todos, para iniciantes também.

Siga os documentos link e comece agora!

    
por 03.10.2014 / 18:11
0

Além da resposta sugerida, uso o seguinte comando:

nohup ./scanner.py -flag1 flag1value -flag2 flag2value &

para criar uma nova instância. Para ver todo o scanner.py instance em execução, utilizo:

ps aux | grep scanner.py

Para matar uma instância específica, eu uso:

kill -9 {PID}

em que {PID} é obtido do comando ps aux , por exemplo kill -9 1234

    
por 06.10.2014 / 04:18