如何优雅地杀死docker容器中的传输守护进程?

如何优雅地杀死docker容器中的传输守护进程?

我正在尝试使用 https 将独立的传输守护进程 docker 化。因此,我正在使用transmission-daemonnginx包,docker 基于 alpine Linux。

为了运行这两个程序,我使用supervisor

一切正常,但我希望它能docker container stop正常终止我的容器。因此,我已配置supervisor为将 TERM 信号传播到transmission-daemon

当传输空闲时,这种方法很有效。但如果我在容器下载或执行某些操作时停止它,不幸的是它不起作用。它似乎完全忽略了信号,因为即使下载完成后,它仍继续运行。

我完全不知道为什么。有人能帮我吗?

这是我的主管传输配置:

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

我愿意接受任何建议。

答案1

来自传动拱门 wiki看起来结束的命令transmission-daemon是:

killall transmission-daemon

或者

$ transmission-remote --exit

或者Ubuntu 的帮助:

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

我认为 SIGTERM 和 TERM 信号是相同的,并且killall默认发送 SIGTERM,看起来您的主管应该可以工作……在 stopwaitsecs 之后,它也应该发送 KILL 信号,所以除非它没有在正确的时间发送正确的信号……在终端中确认 TERM/SIGTERM 将终止传输。如果没有,也许这是一个错误。

尝试添加redirect_stderrstdout_logfile行,看看它是否会告诉监督者任何有用的信息

答案2

这可能是一个错误。Alpine 错误跟踪器中报告:

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

相关内容