1

Bundlerを使用してSupervisordでKibanaをセットアップしようとしています。Bundler を使用して Kibana の依存関係をインストールすることは、まったく問題ありませんでした。実行してみましたが、うまくいきました。また、htop で生成されるプロセスを見ながら Ctrl-C で強制終了しようとしましたが、うまくいきました。bundle exec ruby kibana.rb

ただし、supervisord (または SIGINT や SIGTERM などのシグナル) を使用してバンドラーを強制終了すると、それによって生成された 2 つの子は生き残ります。そのため、supervisord で kibana ジョブを再起動すると、再起動されたジョブが割り当てようとするポートが既に使用されているため、再起動は失敗します。

私が見つけた限りでは、bundler exec は fork すべきではありません。信号を受け取ったときに期待どおりに動作しません。

私に何ができる?バンドラーからの切り替えは解決策になる可能性がありますが、望ましくありません。

4

1 に答える 1

0

私はそれを解決しました。以下に小さな run_kibana bash ヘルパーを書きました (別のスタック オーバーフロー スレッドにあります)。

function kill_kibana() {
  echo "Trapped termination of Kibana subprocessess"
  pkill -TERM -P $1
}

bundle exec ruby kibana.rb &
pid=$!
trap "kill_kibana $pid" SIGINT SIGTERM SIGKILL SIGQUIT
wait $pid

そして、それは魅力のように機能します。kill_kibana() 関数でトラップされた実際のシグナルを送信するように拡張するのが合理的かもしれません。

于 2013-01-15T09:52:18.133 に答える