优雅地阻止Phusion Passenger在apache上运行

时间:2016-10-28 05:52:34

标签: ruby apache docker passenger phusion

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

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

我在考虑编写某种包装脚本,但无法知道如何启动。

对此方面的任何建议都将非常感谢!

感谢。

1 个答案:

答案 0 :(得分:0)

可以通过发出以下命令(如果需要更改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

更新:根据评论。

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

使用不同的超时停止容器:

docker stop -t <time in seconds> <container id/ name>

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

UPDATE2 在您的情况下发送自定义信号SIGWINCH。有关详细信息,请参阅here

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

<强> UPDATE3 有关信号捕获的有用资源:

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

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

希望这些有用。