runit não mata processo em sv stop ou sv reload

1

Eu estou executando um processo de selênio sem cabeça ao longo de um servidor Jenkins em uma caixa Linux AMI, tudo gerenciado pelo runit.

o problema é que a emissão de "sv stop selenium" ou "sv reload selenium" não significa ou mata a instância antiga ao longo de seus processos filhos, mas simplesmente os separa do processo runsv, então eles continuam a executar sem executar eles, resultando em uma tentativa de reinicialização com falha do serviço.

eu acho que minha pergunta está relacionada com isso: Como escrever um roteiro de parada personalizado do runit

significado: eu provavelmente deveria tentar um script de controle d personalizado, a fim de limpar manualmente.

Eu segui essa ideia: link

No entanto, cat'ing o pid de / etc / sv / selenium / supervise / pid e encaminhá-lo para o loop não fez nenhuma diferença.

Algum conselho?

script de execução sv:

#!/bin/sh

exec 2>&1
exec chpst -u jenkins -U jenkins /usr/bin/xvfb-run \
--server-args="-screen 0 1024x768x32" \
/usr/bin/java -jar /usr/local/bin/selenium-server-standalone-2.42.1.jar \
-ensureCleanSession \
-browserSessionReuse
    
por Andreas Wagner 14.07.2014 / 19:32

1 resposta

3

Se você adicionar -P à linha de comando chpst, o chpst criará um novo grupo de processos para o seu serviço. Então, no seu script 'd' personalizado, você pode ler pid e kill -TERM -pid para enviar o sinal TERM para todo o grupo de processos.

Isso deve funcionar desde que nenhum processo filho crie seu próprio grupo de processos.

No entanto, pode ser mais limpo iniciar o xvfb e o java separadamente (dividi-los em dois serviços runit).

    
por 03.09.2014 / 00:02