Manter 100 instâncias de um programa em execução

12

Atualmente, estou usando o supervisord para manter 100 instâncias de um script sendo executado de uma só vez. Se algum morrer, ele inicia um novo.

No entanto, parece estar lutando para manter números maiores (> 300 processos) e estou procurando uma substituição. O Monit não parece fazer o que eu quero, pois monitora scripts individuais e não parece ser capaz de assistir 100 instâncias do mesmo script com facilidade.

Alguma sugestão sobre uma ferramenta diferente que eu poderia usar?

    
por jong 31.01.2012 / 16:22

3 respostas

1

Você pode usar:

ps h --ppid $$ | wc -l

para obter o número de processos filhos a partir de um script bash (lembre-se que isso inclui ps). Então, se você quiser ter 1000 processos, verifique se isso retorna 1001. Se não ativá-los com:

cmd &

para que eles sejam executados como filhos do script atual (e, portanto, incluídos na contagem). Você pode então dormir um pouco e depois verificar novamente em um loop para sempre. Uma coisa a ter em mente é se você está gerando outros processos que você precisará modificar o comando ps para filtrar os processos que você deseja.

Esse primeiro comando é a peça central do quebra-cabeça, deve ser um pouco mais até que você tenha seu roteiro.

    
por 21.02.2012 / 04:38
0

Eu usaria pgrep|wc -l ou algo parecido em um script de shell simples. Espere um segundo (ou menos no Linux, se quiser) entre cada verificação com sleep .

    
por 31.01.2012 / 22:34
0

Se o seu script morrer e voltar para o shell, você poderá usar um script de wrapper para cada instância:

while [ 1 == 1 ] ; do /path/to/script ; done

ou você escreve algum wrapper que bifurca os scripts e usa wait/waitpid para capturar processos mortos.

    
por 01.02.2012 / 10:03