gpt4 book ai didi

cron - elastic beanstalk cron 运行两次

转载 作者:行者123 更新时间:2023-12-02 17:43:06 25 4
gpt4 key购买 nike

我有一个关于 elastic beanstalk 和 cron 作业的应用程序。

设置cron的代码是

container_commands:
01_some_cron_job:
command: "echo '*/5 * * * * wget -O - -q -t 1 http://site.com/cronscript/' | crontab"
leader_only: true

此脚本调用邮件发件人。我每次都会收到两条消息。

http://site.com/cronscript/ 的代码看起来像(php 代码)

require_once('ses.php');
$ses = new SimpleEmailService(EMAIL_SHORTKEY, EMAIL_LONGKEY);
$m = new SimpleEmailServiceMessage();
$m->addTo('user@domain.com');
$m->setFrom('response_service@domain.com');
$m->setSubject('test message');
$m->setMessageFromString('', 'message content');
$send_emails=($ses->sendEmail($m));

当我从浏览器的地址栏调用 http://site.com/cronscript/ 时,我收到了一条消息。

最佳答案

我相信发生的事情是,当您第一次部署应用程序时,AutoScaling 会选择一个实例作为领导实例,并在该实例上创建新的 cron 作业。下次您部署应用程序时,AutoScaling 会选择另一个实例作为领导者。因此,您最终会在两个实例上执行相同的 cron 作业。

所以基本测试是通过 ssh 连接到所有实例并使用 crontab -l 检查它们的 crontab 内容

您可以通过删除实例上的旧 cron 作业来避免重复的 cron 作业,无论它是否是领导者。

container_commands:
00_remove_old_cron_jobs:
command: "crontab -r || exit 0"
01_some_cron_job:
command: "echo '*/5 * * * * wget -O - -q -t 1 http://example.com/cronscript/' | crontab"
leader_only: true

Running Cron In Elastic Beanstalk Auto-Scaling Environment 中所述: || exit 0 是强制性的,因为如果机器中没有 crontab,crontab -r 命令将返回状态代码 > 0(错误)。如果其中一个 container_commands 失败,Elastic Beanstalk 将停止部署过程。

虽然我个人从未遇到过在 Elastic Beanstalk 实例上找不到 crontab 的情况。

您可以运行/opt/elasticbeanstalk/bin/leader-test.sh来测试它是否是leader实例。

希望对您有所帮助。

关于cron - elastic beanstalk cron 运行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18103744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com