在Docker中提供的Django应用程序中注册SIGINT / SIGQUIT信号

我有一个Django应用程序,它有一个需要完成的队列系统(构build来自各种开发人员的一些版本)。 然而,在一天结束的时候,我需要closures它,但是运行的版本不应该被终止。 为了实现这一点,我想我可以捕获终止信号(如SIGINT / SIGQUIT / SIGTERM),以便应用程序可以等待释放完成,然后closures系统。

我有以下信号注册系统:

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容器时,SIGINT / SIGQUIT信号被uWSGI捕获,而不是由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 ...