peketaminの日記

その辺のプログラマーのチラ裏です。

celery で Worker Lost Error: Worker exited prematurely: exitcode 155 が出る件についてコメントした

同じworker name (id) を持つ親プロセスからforkされたワーカープロセスがあるとdequeueが重複するのか、 EX_RECYCLEが出て worker lost error が起こる。

worker name にユニークな名前を当てているにも関わらずエラーが起きる場合は、デプロイなどのタイミングで 親ワーカープロセスがkill出来てない可能性がある。つまり、残留ワーカープロセスと新規にforkされたワーカープロセスが 名前重複する。

WorkerLostError: Worker exited prematurely: signal 4 (SIGILL). · Issue #227 · celery/billiard · GitHub

WorkerLostError: Worker exited prematurely: exitcode 155 · Issue #3085 · celery/celery · GitHub

変なワーカープロセスが起動していないかを確認して、

$ supervisorctl stop celery_worker
# または
$ kill -SIGTERM (pid of celery worker)
$ pgrep -f  'celery -A my_project.celery.app worker'
# または
$ ps auxw | grep 'celery -A my_project.celery.app worker'
$ pkill -f 'celery -A my_project.celery.app worker'

それでも残留プロセスがある場合は、再度kill。残留プロセスがゼロになったらworkerを再始動させる。

他は issue コメントの通り。

君は僕のもの

君は僕のもの