我正在使用Celery來設置使用Fabric的遠程服務器。爲什麼我不能抓到芹菜的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我故意給它一個1.2.3.4以ssh不存在。這應該是來自織物的錯誤 – Sparrowcide
回答了一個答案,讓我知道這是否有效。 – lpiner