私はファブリックを使用してリモートサーバーを設定するためにCeleryを使用しています。なぜCeleryのWorkerLostErrorを捕まえられないのですか?
私はServer.statusを(ダブルランニングを防ぐために)起動し、Server.statusをエラーになるように変更したいと思います。私のコードを見てください:
class ChangeBackStatusOnErrorTask(celery.Task):
abstract = True
def on_failure(self, exc, task_id, args, kwargs, einfo):
print 'from on_failue', self, exc, task_id, args, kwargs, einfo
return
#server = Server.query.get(server_id)
#server.status = RemoteStatus.ERROR
#db.session.commit()
@celery.task(bind=True, base=ChangeBackStatusOnErrorTask)
def deploy_server(self, server_id):
"""To prevent launching while we are launching, we will
disable launching until the server's status is LAUNCHED
"""
server = Server.query.get(server_id)
if not server.can_launch():
return
try:
server.status = RemoteStatus.LAUNCHING
db.session.commit()
host = server.ssh_user + '@' + server.ip
execute(fabric_deploy_server, self, server, hosts=host)
server.status = RemoteStatus.LAUNCHED
db.session.commit()
except Exception as e:
server.status = RemoteStatus.ERROR
db.session.commit()
traceback.print_exc()
raise e
私はセロリのタスクに誤ったIPアドレスを供給する場合しかし、私はすべての障害処理メカニズムを回避例外が発生することができる午前:
[2017-07-17 03:58:07,077: WARNING/PoolWorker-7] [[email protected]] Executing task 'fabric_deploy_server'
[2017-07-17 03:58:07,078: WARNING/PoolWorker-7] [[email protected]] sudo: apt-get update
[2017-07-17 03:58:17,173: WARNING/PoolWorker-7] Fatal error: Timed out trying to connect to 1.2.3.45 (tried 1 time)
Underlying exception:
timed out
[2017-07-17 03:58:17,173: WARNING/PoolWorker-7] Aborting.
[2017-07-17 03:58:22,172: ERROR/MainProcess] Task handler raised error: WorkerLostError('Worker exited prematurely: exitcode 0.',)
Traceback (most recent call last):
File "/Users/vng/.virtualenvs/AutomataHeroku/lib/python2.7/site-packages/billiard/pool.py", line 1224, in mark_as_worker_lost
human_status(exitcode)),
WorkerLostError: Worker exited prematurely: exitcode 0.
として
ChangeBackStatusOnErrorTask.on_failure
が表示されませんでした。- この例外は、Try/Catchブロックをエスケープしました。
どのようにこのエラーをキャッチできますか?私は自分の仕事を再開できるようにServer.statusをERRORに設定する必要があります。
これは何セロリのバージョンですか? (3の場合は4にアップグレードすることができます)。どのようにあなたの労働者は死んでいる、それは用語のシグナルを取得している/殺すか、ちょうどクラッシュ? – lpiner
@lpiner私は故意にそれが存在しないsshに対して1.2.3.4を与えました。それはファブリックからのエラーでなければなりません – Sparrowcide
答えに亀裂を与えました。 – lpiner