私のアプリは、いくつかの環境変数を必要とするjarファイルです。 1つのファイルにすべての環境変数があります。これは次のようになります。
export VAR=value
export VAR2=value2
#....etc
私のスーパーバイザー設定ファイルは次のようになります。
[program:programname]
command=bash -c "source /path/to/env/file && Java -jar /path/to/jar.jar"
ps -ef | grep programname
は、2つの別々の行に2つのプロセスを示しています。1つはbash -c "source blah && Java blah"
で、もう1つはJava blah
です。
ここで問題があります。supervisorctl stop programname
またはservice supervisor stop
、さらにはkill -9 whatever the supervisor pid is
を実行しても、最初のプロセスは終了しますが、通常のJavaプロセスは残り、孤立し、親pidが1になりました。手動で強制終了せずにjarを強制終了するにはどうすればよいですか?
exec
を使用してbash
をJava
に置き換えます。
[program:programname]
command=bash -c "source /path/to/env/file && exec Java -jar /path/to/jar.jar"
このような場合、強制終了するプロセスは1つだけです。
代わりに自分自身をJavaに置き換えるシェルスクリプトをコマンドにしますか?
#!/bin/bash
source /i/pity/da/env/foo
exec Java ...