在Docker

时间:2016-07-15 17:42:42

标签: python django docker signals

我有一个Django应用程序,其中包含需要完成的队列系统(构建来自不同开发人员的一些版本)。但是,在一天结束时,我需要关闭它,但不应该终止正在运行的构建。为了实现这一点,我想我可以捕获终止信号(如SIGINT / SIGQUIT / SIGTERM),以便应用程序可以等待发布完成并关闭系统。

我有以下信号注册系统:

import time, sys, signal

def signal_handler(signum, frame):
    print('Waiting for the releases to complete')
    time.sleep(5)
    print('TERMINATING GRACEFULLY...')
    sys.exit(0)

for sig in [signal.SIGTERM, signal.SIGINT, signal.SIGQUIT]:
    signal.signal(sig, signal_handler)

当我使用此代码片段从命令行运行django的开发服务器时,它会注册信号并触发处理函数。问题是我的应用程序在具有nginx和uWSGI的Docker上运行。当我运行容器时,它会注册信号,但是当我停止docker容器时,uWSGI捕获SIGINT / SIGQUIT信号,而不是python,我的信号处理程序不会被触发。

我对Docker和uWSGI比较陌生,我无法找到将这个信号直接发送到python的方法。我应该怎么做才能让python捕获信号,而不是uWSGI?

任何帮助都将不胜感激。

编辑: 这是我的入口点脚本。

entrypoint.sh

#!/bin/sh

# Start uWSGI using the configuration file
exec uwsgi --ini ./docker/django/uwsgi.ini

uwsgi.ini

...
module = app.wsgi
socket = path/to/unix/socket.sock
chmod-socket = 666
...

0 个答案:

没有答案