删除 Elastic Beanstalk Cron

Posted

技术标签:

【中文标题】删除 Elastic Beanstalk Cron【英文标题】:Delete Elastic Beanstalk Cron 【发布时间】:2019-10-17 20:52:50 【问题描述】:

我正在使用弹性 beantalk 的 cron.yaml 来触发周期性任务。但是,如果我重新部署我的代码,cron 会被触发两次,它的效果很好。再次部署,任务将被触发 3 次,等等。如何删除现有的 crons,以便在部署时只有一个 cron 实例?

【问题讨论】:

【参考方案1】:

答案在这里:Running a cron job in Elastic Beanstalk

Cron 任务是通过 SQS 队列实现的。如果 cron.yaml 中的端点返回 200 以外的任何值,则触发消息将保留在队列中,并会反复重试。

一旦您确定所有 cron 端点都返回 200,清除队列,冗余调用将停止。

【讨论】:

【参考方案2】:

您可以使用.ebextensions 定义在您的每个实例上运行的命令,并将这些命令限定为仅在一个实例上运行leader_only: true.

例如,

.ebextensions/01_setup_cron.config

container_commands:
    01_some_cron_job:
        command: "cat .ebextensions/your_cron.txt > /etc/cron.d/your_Cron && chmod 644 /etc/cron.d/your_cron"
        leader_only: true

.ebextensions/your_cron.txt

* * * * * root /usr/bin/do-something.sh

# Don't forget to put a blank new line at the end of the cron - cron won't work without it

这会将 cron 文件复制到 /etc/cron.d/ 仅用于一个实例(“领导”实例),这意味着您的 cron 只运行一次。

【讨论】:

以上是关于删除 Elastic Beanstalk Cron的主要内容,如果未能解决你的问题,请参考以下文章

AWS Elastic Beanstalk CRON 作业设置

Aws Elastic Beanstalk 不执行 cron.yaml 文件

AWS Elastic Beanstalk 中的 Cron 来触发 js 文件

在 Elastic Beanstalk 中运行 cron 作业

Elastic Beanstalk 未调度 cron.yaml 中定义的作业

您如何使用 Elastic Beanstalk 和 Java 使用 cron 作业?