13

Heroku dyno で celeryd を実行しています。シャットダウンして、以前に少なくとも 1 つのタスクを処理した (完了した) 場合、正しくシャットダウンせず、Heroku からエラー R12 (終了タイムアウト) が発生します。

Procfile(Djangoとdjango-celeryを介して)私からcelerydを実行する方法は次のとおりです。

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 にアップグレードしましたが、まだ同じ問題があります。

私が知る限り、私のタスクはすべて完了しました。このエラーは、その celery dyno で単一のタスクを実行し、完了するのに十分な時間を与えてから dyno をシャットダウンすることで確実に再現できます。

他に何を確認すればよいかわかりません。これをトラブルシューティングする方法はありますか?タスクがすでに完了しているときに、セロリドが Heroku の SIGTERM に応答するのをブロックするものは何ですか?

4

2 に答える 2

-1

これは、セロリがシグナルをキャプチャして反応せず、が到着するSIGTERMまで待っているように思えます。SIGKILL

このプル リクエストが役立つかもしれません: https://github.com/cybertoast/celery/commit/e9a007b982b0f9268174ae94b351a9275eaef4a3

于 2013-06-26T20:36:38.103 に答える