在Heroku上运行时,如何解决celeryd的退出超时问题(错误R12)



我正在Heroku dyno上运行celeryd。当我关闭它,并且它之前已经处理(甚至完成)了至少一个任务时,它没有正确关闭,我从Heroku收到了一个错误R12(退出超时)。

以下是我如何从Procfile运行celeryd(通过Django和Django-celery):

celeryd: python manage.py celeryd -E --loglevel=INFO

以下是我正在做的触发它的操作:

> heroku ps:scale web=0 celeryd=0 --app myapp

这是我得到的日志输出:

2012-09-07T12:56:31+00:00 heroku[celeryd.1]: State changed from up to down
2012-09-07T12:56:31+00:00 heroku[api]: Scale to celeryd=0, web=1 by mail@mydomain.com
2012-09-07T12:56:32+00:00 heroku[web.1]: State changed from up to down
2012-09-07T12:56:32+00:00 heroku[api]: Scale to web=0 by mail@mydomain.com
2012-09-07T12:56:34+00:00 heroku[celeryd.1]: Stopping all processes with SIGTERM
2012-09-07T12:56:35+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2012-09-07T12:56:37+00:00 heroku[web.1]: Process exited with status 143
2012-09-07T12:56:43+00:00 heroku[celeryd.1]: Error R12 (Exit timeout) -> At least one process failed to exit within 10 seconds of SIGTERM
2012-09-07T12:56:43+00:00 heroku[celeryd.1]: Stopping remaining processes with SIGKILL
2012-09-07T12:56:45+00:00 heroku[celeryd.1]: Process exited with status 137

最初,我在芹菜2.5.5上经历过这种情况。现在我升级到3.0.9,但我仍然有同样的问题。

据我所知,我的任务都完成了。通过在芹菜测功机上运行一个任务,给它足够的时间来完成,然后关闭测功机,可以可靠地再现这个错误。

我不知道还能查什么。知道我该如何解决这个问题吗?当任务已经完成时,什么可以阻止celeryd响应Heroku的SIGTERM?

我遇到了同样的问题。我不确定,但可能已经修复了:

带有-B参数的Worker没有正确关闭beat实例。

因此,如果您在worker实例中使用celebeat,则可能需要升级。

在我看来,这听起来像是芹菜没有捕获SIGTERM信号并对其做出反应,直到SIGKILL到达。

此提取请求可能会帮助您:https://github.com/cybertoast/celery/commit/e9a007b982b0f9268174ae94b351a9275eaef4a3

相关内容

  • 没有找到相关文章

最新更新