※この記事は数行で終わります
javaはsignalを認識できない
signalとはCtrl+C
などを押したときにシステム側が反応し、ソフトウェアに割込み処理を行わせるものです。
dockerでは
コンテナ終了時に内部アプリケーション(コンテナ内のpid1)にシグナルを発報します。10秒間(デフォルト)応答がなければ強制終了します。
つまり
javaアプリケーションに対しては最初から強制終了を行うか、シグナルを文字列に変えてコマンドとして送るかとか考えないといけないのです。
終
補足
ここまでの成り行きを説明します。
- マイクラサーバー立てたるかー
- docker使お
- 起動時にシェルスクリプトでバックアップ取るか
- あれ?正常に終了できないしログも出ない
- pid1問題があるのか
- 軽量init使いたくないなめんどそ
- webguiによるマネージャ...めんどくさそ
-
exec
コマンドを知る(すべての元凶) - おお、ログが出てきた!
- 完成や!おまいらは入れ
- (1か月後)
- プラグイン更新するからサーバー閉じるか
- 終わったから起動するか
- 友「縦もん消えてんだが」
- え? うせやろ
その後、原因を究明した結果が以上のこととなります。
なお、ctrl+c
では終了処理が行われてたので、これはctrl+c
が押されたことを認識し、signal
が発報されたことを認識してないと結論付けました。
その後
軽量initでも解決しなさそうと思ったので、自作することにしました
[minecraft]pid2 <=> [ここを作る]pid1 <=> [Docker]
できたら報告します。
参考