AWS ElasticBeanstalk Cron作业

时间:2017-06-06 21:39:36

标签: amazon-web-services amazon-ec2 cron laravel-5.3 elastic-beanstalk

我们正在为我们的应用程序使用ElasticBeanstalk,以便我们可以自动扩展流量。目前我们只需要一个单独的cron作业,每晚凌晨3点运行,我试图通过.ebextensions使用它。

我在conjob.config文件中有以下内容并且正在执行,因为我可以转到服务器并cat /etc/cron.d/daily_snapshots

files:
    "/etc/cron.d/daily_snapshots":
    mode: "000644"
    owner: root
    group: root
    content: |
        * * * * * root /usr/bin/php /var/www/html/artisan schedule:run >> /dev/null 2>&1

但是,cronjob没有按照我设置的计划执行,因为数据库记录没有更新。我已经在EC2实例上手动运行该命令,它运行得很好。

我们正在使用Laravel 5.3,所以这就是我计划运行cron的方式。

protected function schedule(Schedule $schedule)
{
    $schedule->command('ryno:compile-daily-snapshots')->dailyAt('03:00')->sendOutputTo(storage_path().'/logs/cron.log');
}

如上所述,它将在我执行cron文件中完全相同的命令时运行,但在cron运行时它不会自动执行。

我们目前只有一个实例,今天我已经读到以这种方式执行cronjob并不是一个好主意,因为当另一个实例启动时,它将为环境中的每个EC2实例执行cronjob。

我已经读过我应该使用leader_only设置并将其设置为true但我也读过因为领导者可以改变而存在问题。

我知道我可以启动一个工作者实例,然后运行cron,但只有一个cron,这似乎是浪费大量资源。

您如何在ElasticBeanstalk环境中管理您的cronjobs以及您建议我们采用哪种方式进行此路径?

0 个答案:

没有答案