【问题标题】:Gracefully stop Phusion Passenger running on apache优雅地停止在 apache 上运行的 Phusion Passenger
【发布时间】:2017-03-10 23:28:58
【问题描述】:

我有一个在 前台 运行 apache 的 docker 容器。在停止 docker 容器时,会向所有子进程(在我们的例子中是 apache)发送一个 SIGTERM。

现在,我面临的问题是在接收到 SIGTERM 信号时正常关闭 apache。 Apache 通常会立即终止当前请求,这是问题的主要原因。不知何故,我需要将 SIGTERM 信号转换为 SIGWINCH ,这最终会优雅地关闭服务器。

我正在考虑编写某种包装脚本,但不知道如何开始。

任何这方面的建议都将受到高度赞赏!

谢谢。

【问题讨论】:

  • 你是如何启动 docker 容器的?为什么需要在前台运行它?
  • @Rao 我们正在使用 CMD ["script.sh"] 启动容器。该脚本包含使用以下命令启动 apache:- httpd -k start -DFOREGROUND。我们需要在前台运行它,以便使用 DOCKER LOGS 命令获取它的日志。还有其他方法吗?

标签: ruby apache docker passenger phusion


【解决方案1】:

可以通过发出以下命令优雅地停止容器内的tomcat(如果需要,更改tomcat路径):

docker exec -it <container id / name> /usr/local/apache2/bin/apachectl -k graceful

对于您的评论,如果您想查看 tomcat 日志以防它未在前台运行

docker exec -it <container id / name> tail -f tail -f /usr/local/apache2/logs/error_log

更新:基于 cmets。

docker documentation,您可以指定停止 docker 容器的时间。默认情况下,它只会等待 10 秒。

以不同的超时时间停止容器:

docker stop -t &lt;time in seconds&gt; &lt;container id/ name&gt;

我相信,在停止时增加超时时间可能会对您的情况有所帮助。

UPDATE2 在您的情况下发送自定义信号 SIGWINCH。详情请参考here

docker kill -s SIGWINCH <apache container id / name>

更新3 有关于信号捕获的有用资源:

https://medium.com/@gchudnov/trapping-signals-in-docker-containers-7a57fdda7d86#.qp68kskwd

http://www.techbar.me/stopping-docker-containers-gracefully/

希望这些有用。

【讨论】:

  • 我们没有tomcat应用服务器。我们在Passenger for Ruby 应用程序上运行apache!
  • 对不起,假设是 apache-tomcat,但没关系。您只需要使用正确的 apache 路径即可。更新了使用 apache2 的答案。
  • 谢谢..但是我们实际上有两件事在这里:- 1)我们正在使用 docker stop 来停止容器。所以不能专门只是 sto apache! .. 我们需要以某种方式拦截 SIGTERM(由 docker stop 发送)并触发 apachectl -k graceful ! 2)我们将日志重定向到标准输出,而不是任何文件!有什么建议吗?
  • 第一个实际上是您正在寻找的。第二个是根据你评论为什么你去前台提供的,只是为了表明你甚至可以在没有前台的情况下看到正在发生的事情。如果您认为此答案有帮助,请考虑接受。
  • 谢谢..但是我们实际上有两件事在这里:- 1)我们正在使用 docker stop 来停止容器。所以不能专门只是 sto apache! .. 我们需要以某种方式拦截 SIGTERM(由 docker stop 发送)并触发 apachectl -k graceful ! 2)我们将日志重定向到标准输出,而不是任何文件!有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 2013-11-02
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
相关资源
最近更新 更多