【发布时间】:2026-01-31 23:00:01
【问题描述】:
我有 celery 在 docker 容器中运行,处理来自 rabbitmq 的任务。我正在尝试停止并删除 celery 容器,同时允许当前正在运行的任务完成。文档建议向主进程发送 TERM 或 INT 信号应该预热关闭 celery,尽管我发现子进程刚刚被杀死。
当我向 TERM 发送它抛出的正在运行的进程时:
WorkerLostError('Worker exited prematurely: signal 15 (SIGTERM).',)
当我发送 INT 时,正在运行的进程会正常退出,尽管它也不允许任务按照文档的建议完成。
我正在使用以下命令启动 docker 容器:
su -m celery_user -c "python manage.py celery worker -Q queue-name"
对为什么会发生这种情况有任何想法吗?难道是信号正在终止容器以及芹菜进程?
我正在发送信号:
docker kill --signal="TERM" containerid
或docker exec containerid kill -15 1
【问题讨论】:
-
acks_late 任务的可能解决方案:github.com/celery/celery/issues/2700#issuecomment-477147709
标签: python docker celery django-celery