web-dev-qa-db-ja.com

Dockerコンテナ内の送信デーモンを正常に強制終了する方法は?

スタンドアロンの伝送デーモンをhttpsでドッキングしようとしています。そのため、transmission-daemonおよびnginxパッケージを使用しており、DockerはAlpineLinuxに基づいています。

両方のプログラムを実行するために、私はsupervisorを使用しています。

すべて正常に機能しますが、docker container stopがコンテナを正常に強制終了するようにします。そこで、TERMシグナルをtransmission-daemonに伝播するようにsupervisorを構成しました。

これは、トランスミッションがアイドル状態のときにうまく機能します。しかし、ダウンロードまたは何かをしているときにコンテナを停止すると、残念ながら機能しません。ダウンロードが終了した後も実行を続けるため、信号を完全に無視しているように見えます。

理由は全くわかりません。誰かが私を助けてくれますか?

これが私のスーパーバイザー送信構成です:

[program:transmission]
user=transmission
command=/usr/bin/transmission-daemon -f
stopsignal=TERM
stopwaitsecs=60
stopasgroup=true
killasgroup=true

私はどんな提案にもオープンです。

1
lama02

Transmission Arch wiki からtransmission-daemonを終了するコマンドは次のようになります。

killall transmission-daemon

または

$ transmission-remote --exit

または buntuのヘルプ: から

transmission-remote -n 'transmission:transmission' -q

SIGTERMシグナルとTERMシグナルは同じだと思います。また、killallのデフォルトはSIGTERMを送信することです。スーパーバイザーは機能するはずです... stopwaitsecsの後、KILLシグナルも送信することになっているので、そうでない場合は適切なタイミングで適切な信号を送信していません...端末でTERM/SIGTERMが送信を強制終了することを確認してください。そうでない場合は、バグである可能性があります。

redirect_stderrまたはstdout_logfile行を追加して、スーパーバイザーに役立つ情報が表示されるかどうかを確認してください。

1
Xen2050

おそらくバグです。アルパインバグトラッカーで報告:

https://bugs.alpinelinux.org/issues/8218

1
lama02