Como ter certeza de que um processo filho de um trabalho de supervisor morre quando mato o supervisor

2

Meu aplicativo é um arquivo jar que requer algumas variáveis de ambiente. Eu tenho todas as variáveis de ambiente em um arquivo, que é assim:

export VAR=value
export VAR2=value2
#....etc

Meu arquivo de configuração do supervisor é assim:

[program:programname]
command=bash -c "source /path/to/env/file && java -jar /path/to/jar.jar"

ps -ef | grep programname mostra dois processos em duas linhas separadas: um é bash -c "source blah && java blah" e o outro é apenas java blah .

Agora, aqui está o problema: se eu faço supervisorctl stop programname ou service supervisor stop ou mesmo kill -9 whatever the supervisor pid is , o primeiro processo morre, mas o processo java normal permanece e se torna órfão, com o pai pid agora 1. Como faço o jarro morre sem matá-lo manualmente?

    
por snetch 03.06.2016 / 16:44

2 respostas

2

Use exec para substituir bash por java :

[program:programname]
command=bash -c "source /path/to/env/file && exec java -jar /path/to/jar.jar"

Nesse caso, você terá apenas um processo para ser morto.

    
por 03.06.2016 / 17:24
2

Faça o comando em vez de um script de shell que se substitui com o java?

#!/bin/bash
source /i/pity/da/env/foo
exec java ...
    
por 03.06.2016 / 16:59