我有一个单独的 Celery Beat 和 Work 服务在 ECS 中运行。该工作人员与 SQS 的连接似乎正常。另一方面,The Beat 却给我带来了麻烦。我使用这些说明作为我正在做的事情的模板。
我有点偏离,因为我已经有一个在 AWS 中运行的现有 Terraform/Django 项目。 Django项目也在ECS上。
我很难知道要寻找什么,因为错误相当模糊。为什么计划会创建“权限被拒绝”? Beat 是否正在尝试写入 SQS?我目前有 4 个队列。
我正在从容器定义中执行以下命令:
celery -A backend beat
我还在容器定义中运行以下内容,因为我读到 ECS 始终以 root 身份运行。
{"name": "C_FORCE_ROOT", "value": "true"}
根据官方 Celery Beat 文档(在“启动调度程序”部分下):
Beat 需要将任务的最后运行时间存储在本地数据库文件(默认名称为 celerybeat-schedule)中,因此需要在当前目录中进行写入,或者您可以为此文件指定自定义位置:
celery -A proj beat -s /home/celery/var/run/celerybeat-schedule
所以我认为您只需要提供一个容器可以通过
-s
标志写入文件的路径。