【问题标题】:How does supervisord stop processes inside a Docker container (trap kill signals)supervisord 如何停止 Docker 容器内的进程(陷阱终止信号)
【发布时间】:2015-07-29 19:24:54
【问题描述】:

当您向 docker 容器发送停止或终止命令(带有某些特定信号,例如 HUP、TERM 等)时,supervisord 如何拦截该信号并将其发送到其子进程?

使用 supervisord 时如何优雅地停止容器内的进程?

可以在[program:x] 部分中指定两个属性:stopsignalstopwaitsecs。但似乎没有办法指定自定义关闭/停止脚本(例如 tomcat_shuytdwon.sh 或类似的东西)。一些程序使用自定义关闭过程来优雅地停止。

【问题讨论】:

    标签: docker supervisord


    【解决方案1】:

    根据supervisord documentation,当您发送SIGTERM 时,supervisord 进程及其所有子进程都将关闭。所以它会自动将信号传递给它的子进程。所以一个简单的docker stop 就足够了。

    【讨论】:

    • 嗨@h3nrik!好的!但似乎没有办法(至少在程序部分配置中)指定自定义停止脚本来停止我的应用程序。想象一下,我需要在结束应用进程之前调用一个特定的停止脚本来执行清理任务。
    • 没有。无法指定对信号做出反应的自定义脚本。
    • 但是当您将在容器中执行的命令包装在 bash 包装脚本中时,您可以 trap 这些信号并在该脚本中对它们做出反应,也可以 forward 将它们发送给子进程由该脚本包装。
    • 哼!好主意!我会尝试这种方法...您认为值得向 Supervisord 发出功能请求支持自定义停止命令/脚本吗?这对你有意义吗?
    • 我认为他们不想提供这种可能性。陷阱可能会“劫持”整个信号处理。因此,他们可能希望确保安全并防止用户这样做。
    猜你喜欢
    • 1970-01-01
    • 2012-02-23
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 2018-09-05
    相关资源
    最近更新 更多