Celery 5.1.0执行status命令报错:No nodes replied within time constraint
celery status返回"No nodes replied within time constraint" 环境信息
- Celery版本:5.1.0 (sun-harmonics)
- 消息代理/后端:Redis 7.0.5
- Python版本:3.6.15
Worker启动命令
celery -A task_scheduler.celery_task worker --loglevel=debug -n ekkis -E
Worker运行日志(部分)
[2022-11-06 03:02:15,913: DEBUG/MainProcess] | Worker: Preparing bootsteps.
[2022-11-06 03:02:15,918: DEBUG/MainProcess] | Worker: Building graph...
[2022-11-06 03:02:15,919: DEBUG/MainProcess] | Worker: New boot order: {StateDB, Beat, Timer, Hub, Pool, Autoscaler, Consumer}
[2022-11-06 03:02:15,933: DEBUG/MainProcess] | Consumer: Preparing bootsteps.
[2022-11-06 03:02:15,934: DEBUG/MainProcess] | Consumer: Building graph...
[2022-11-06 03:02:16,033: DEBUG/MainProcess] | Consumer: New boot order: {Connection, Events, Heart, Mingle, Gossip, Tasks, Control, Agent, event loop}
[2022-11-06 03:02:16,034: INFO/MainProcess] LIQUIDITY PROVISION TASK_SCHEDULER - Genesis Subscribe Started
[2022-11-06 03:02:16,046: DEBUG/MainProcess] http://vault.gitlab-managed-apps.svc.cluster.local:8200 "GET /v1/auth/token/lookup-self HTTP/1.1" 200 908
[2022-11-06 03:02:16,100: DEBUG/MainProcess] http://vault.gitlab-managed-apps.svc.cluster.local:8200 "GET /v1/site/data/prod/site HTTP/1.1" 200 None
[2022-11-06 03:02:16,105: DEBUG/MainProcess] http://vault.gitlab-managed-apps.svc.cluster.local:8200 "GET /v1/auth/token/lookup-self HTTP/1.1" 200 908
[2022-11-06 03:02:16,111: DEBUG/MainProcess] http://vault.gitlab-managed-apps.svc.cluster.local:8200 "GET /v1/site/data/prod/site HTTP/1.1" 200 None
状态查询命令及报错
执行状态查询命令:
celery -A task_scheduler.celery_task status
返回错误:
Error: No nodes replied within time constraint
补充信息:celery report输出
software -> celery:5.1.0 (sun-harmonics) kombu:5.1.0 py:3.6.15 billiard:3.6.4.0 redis:3.5.3 platform -> system:Linux arch:64bit kernel version:5.4.188+ imp:CPython loader -> celery.loaders.app.AppLoader settings -> transport:redis results:disabled
排查建议
- 确认配置一致性:检查
task_scheduler.celery_task中的Redis连接参数(主机、端口、数据库、密码等),确保celery status命令与worker使用完全相同的配置,连接同一个Redis实例。 - 指定节点名称查询:启动worker时通过
-n ekkis指定了节点名,尝试在状态命令中指定该节点:celery -A task_scheduler.celery_task status ekkis,看是否能返回节点状态。 - 调整超时时间:
celery status默认超时时间较短,尝试延长超时:celery -A task_scheduler.celery_task status --timeout=10。 - 验证Redis pub/sub功能:Celery状态查询依赖Redis的发布订阅机制,用Redis CLI执行
PUBSUB CHANNELS查看是否有Celery相关的频道,同时检查网络策略是否阻止了worker与Redis之间的消息传递。 - 检查worker控制模块状态:从日志看worker已加载Control模块,但确认配置中未禁用
worker_enable_remote_control(默认启用),同时查看worker日志中是否有Control模块的错误信息。 - 检查Redis中Celery节点注册:用Redis CLI执行
KEYS "*celery*",查看是否存在celery-workers等相关键,确认worker已在Redis中完成注册。 - 确认依赖版本兼容性:当前redis-py版本为3.5.3,可尝试升级到较新版本,排查是否存在客户端与Redis服务端的兼容性问题。
内容的提问来源于stack exchange,提问作者Erick Calder

