弹性豆茎

问题描述 投票:2回答:2

我在 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('[email protected]');
$m->setFrom('[email protected]');
$m->setSubject('test message');
$m->setMessageFromString('', 'message content');
$send_emails=($ses->sendEmail($m));

当我打电话 http://site.com/cronscript/ 从浏览器的地址栏,我收到了一个我想要的消息。

cron response amazon-elastic-beanstalk
2个回答
3
投票

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

因此,基本的测试是通过SSH连接到所有的实例,并检查它们的 crontab 内容有 crontab -l

你可以通过删除实例上的旧的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

正如在 在Elastic Beanstalk自动伸缩环境中运行Cron。: || exit 0 是必须的,因为如果机器中没有crontab,那么 crontab -r 命令会返回一个状态码> 0(错误)。如果其中一个container_commands失败,Elastic Beanstalk会停止部署进程。

虽然我个人从未经历过当 crontab 在Elastic Beanstalk实例上找不到。

你可以运行 /opt/elasticbeanstalk/bin/leader-test.sh 来测试它是否是一个领导者实例。

希望能帮到你。


0
投票

我也有同样的问题,只是把用户从root改成了我用eb ssh登录的用户,就可以了。我的代码是这样的。

files:
"/etc/cron.d/mycron":
    mode: "000644"
    owner: ec2-user
    group: ec2-user
    content: |
        30 1 * * * echo $(date) >> /tmp/cron_start.log; /usr/local/bin/daily_script.sh >> /tmp/crons.log 2>&1;



"/usr/local/bin/daily_script.sh":
    mode: "000755"
    owner: ec2-user
    group: ec2-user
    content: |
        #!/bin/bash

        date > /tmp/date
        # Your actual script content
        /opt/python/run/venv/bin/python3 /opt/python/current/app/cronjob_files/email_data.py >> /opt/python/current/app/cron.logs 2>&1

        exit 0

...

© www.soinside.com 2019 - 2024. All rights reserved.