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.
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?
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 ...
Tags process shell supervisord