Aws Elasticbeanstalk cron.yaml 工作人员问题
Posted
技术标签:
【中文标题】Aws Elasticbeanstalk cron.yaml 工作人员问题【英文标题】:Aws Elasticbeanstalk cron.yaml worker issue 【发布时间】:2017-02-23 19:12:29 【问题描述】:我有一个应用程序部署到 Elasticbeanstalk 并作为 worker 运行,我想添加一个每小时运行一次的定期任务,所以我用这个 conf 创建了一个 cron.yaml:
version: 1
cron:
- name: "task1"
url: "/task"
schedule: "00 * * * *"
但是在部署过程中我总是遇到这个错误:
[Instance: i-a072e41d] Command failed on instance. Return code: 1 Output: missing required parameter params[:table_name] - (ArgumentError). Hook /opt/elasticbeanstalk/addons/sqsd/hooks/start/02-start-sqsd.sh failed. For more detail, check /var/log/eb-activity.log using console or EB CLI.
我为 EBT 角色添加了正确的权限,并验证了 cron.yaml 可能是针对 Windows (CR/LF) 格式化的,但总是出现相同的错误。
missing required parameter params[:table_name]
好像缺少 DynamoDB 表名,我可以在哪里定义它? ,
知道如何解决这个问题。 谢谢!
【问题讨论】:
【参考方案1】:当我在容器命令中动态生成 cron.yaml 文件时遇到了同样的错误,而不是已经在我的应用程序根目录中。
用于 cron 的 DynamoDB 表是在 PreInitStage 中创建的,该阶段发生在您的任何自定义代码执行之前,因此如果没有 cron.yaml 文件,则不会创建 DynamoDB 表。当文件稍后出现并且正在安排 cron 作业时,它会失败,因为从未创建过表。
我通过在我的应用程序根目录中添加一个骨架 cron.yaml 解决了这个问题。它必须有一个有效的 cron 作业(我只是每月点击一次我的健康检查 URL),但它没有被安排,因为作业注册确实发生在您的自定义命令之后,该命令可以重置文件,只包含您需要的作业。
这可能不是您的确切问题,但希望它可以帮助您找到您的问题,因为在未创建 DynamoDB 表时会发生错误。
【讨论】:
【参考方案2】:好吧,我没有找到解决这个问题的方法,所以我转向了另一种方法,它使用 CloudWatch Event 创建一个规则类型:调度并选择一个目标作为 SQS 队列(使用工作程序配置的那个)。 完美运行!
【讨论】:
【参考方案3】:您的 yaml 格式似乎已关闭。这可能是这里的问题。
version: 1
cron:
- name: "task1"
url: "/task"
schedule: "00 * * * *"
格式化在 Yaml 中至关重要。至少试试这个。
【讨论】:
谢谢乔治,我编辑了我的帖子以放置正确的 cron.yaml 文件(我在第一个版本中错误地复制了它),我使用的格式与你建议的相同。仍然得到同样的错误。以上是关于Aws Elasticbeanstalk cron.yaml 工作人员问题的主要内容,如果未能解决你的问题,请参考以下文章
aws elasticbeanstalk:无法通过 eb cli 部署到工作环境
Laravel 命令在 AWS EC2 上由 Cron 执行时返回不同的输出
具有 ZF2 的 AWS 工作程序层 cron 产生 404,但在本地工作?