Supervisord 泄漏通过 shell 脚本启动的子进程

Supervisord 泄漏通过 shell 脚本启动的子进程

我正在使用supervisor 3来守护一个python进程,该进程通过一个bash脚本启动,该脚本为python设置了一些配置。bash脚本在前台运行python程序,仅供参考。

此设置存在以下问题:当 Supervisord 尝试终止进程时,它只会终止 bash 脚本,而不会终止 python 进程。因此,我最终泄漏了运行旧代码的 python 进程,并引发了各种问题。我该如何解决这个问题?

主管是否有一些配置选项可以告诉它也终止子进程?

让 bash 脚本捕获 TERM 信号并明确将其传递给子进程会有帮助吗?这似乎没有必要,因为当我从交互式 shell 运行它时,子 python 进程就会被终止。

我看到主管让我选择要终止的信号,默认为TERM现在。更改它是否有帮助?

答案1

Stackoverflow 上有一个类似的问题:

Tornado 无法在 Supervisor 中干净地重启

stopasgroup = true对我有用的解决方案是在相关组中使用[program:x]

答案2

我最近写了一篇文章来讨论这个问题并解释如何正确解决这个问题:

http://veithen.github.io/2014/11/16/sigterm-propagation.html

相关内容