如何启动几个芹菜过程/队列,并在关闭容器上优雅地关闭它们


# start 2 main processes in the background
# one with 1 worker and another with NUM_CPU workers
# each has separate queue 
celery multi start 2 -c:1 1 -Q:1 long -Q:2 default 
# somehow wait til container is shut down
while true; do sleep 5; done
# fetch termination signal
trap - SIGTERM SIGINT  # and maybe INT
# gracefully stop everything
celery multi stop

但这是一个问题:Docker不能将Sigterm发送到我们的脚本,除非其中某个过程代表Docker命令运行(我不知道有相同的PID或其他东西(。

要代表脚本运行一个进程,我们需要添加exec,使用简单的设置,看起来像这样:

# ...
exec celery -A app worker

但是我们不能将exec添加到原始脚本中的任何内容,因为在此之后完成工作后,一切都会关闭。

docker stop不幸的是,不幸的是,如果没有按时处理sigterm,则在特定期间后发送sigkill,这不是芹菜对优雅关闭的期望。

为了做到这一点(相当于控制台中的Ctrl-C(运行docker kill --signal=SIGINT your-container-name

相关内容

  • 没有找到相关文章

最新更新