我正在尝试使用 https 将独立的传输守护进程 docker 化。因此,我正在使用transmission-daemon
和nginx
包,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
transmission-remote -n 'transmission:transmission' -q
我认为 SIGTERM 和 TERM 信号是相同的,并且killall
默认发送 SIGTERM,看起来您的主管应该可以工作……在 stopwaitsecs 之后,它也应该发送 KILL 信号,所以除非它没有在正确的时间发送正确的信号……在终端中确认 TERM/SIGTERM 将终止传输。如果没有,也许这是一个错误。
尝试添加redirect_stderr
或stdout_logfile
行,看看它是否会告诉监督者任何有用的信息
答案2
这可能是一个错误。Alpine 错误跟踪器中报告: