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