Как устранить неполадку тайм-аута выхода celeryd при работе на Heroku (ошибка R12)?
Я бегу с сельдереем на Heroku Dyno. Когда я выключаю его, и он ранее обработал (даже выполнил) хотя бы одну задачу, он не закрывается должным образом, и я получаю ошибку R12 (тайм-аут выхода) от Heroku.
Вот как я бегу из сельдерея из моего Procfile
(через Джанго и Джанго-сельдерея):
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 и у меня все та же проблема.
Насколько я могу судить, все мои задачи выполнены. Эту ошибку можно надежно воспроизвести, выполнив одну задачу на этом динамо-сельдерее, предоставив ей достаточно времени для завершения, а затем выключив динамо-версию.
Я не знаю, что еще проверить. Любая идея, как я могу решить эту проблему? Что может помешать Селериду ответить на SIGTERM Героку, когда задание уже выполнено?
2 ответа
Я сталкиваюсь с той же проблемой. Я не уверен, но это могло быть исправлено:
Работник с аргументом -B неправильно закрыл экземпляр ритма.
Поэтому, если вы используете ритм сельдерея внутри рабочего экземпляра, вам может потребоваться обновление.
Это звучит для меня, как сельдерей не захватывает SIGTERM
сигнал и реагируя на это, ожидая, пока SIGKILL
прибывает.
Этот запрос извлечения может помочь вам: https://github.com/cybertoast/celery/commit/e9a007b982b0f9268174ae94b351a9275eaef4a3