PHPackages                             eis3nhorn/laravel-elasticbeanstalk-cron - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [DevOps &amp; Deployment](/categories/devops)
4. /
5. eis3nhorn/laravel-elasticbeanstalk-cron

ActiveLibrary[DevOps &amp; Deployment](/categories/devops)

eis3nhorn/laravel-elasticbeanstalk-cron
=======================================

Ensure only one Laravel instance is running CRON jobs in an EB environment

0.3(8y ago)024MITPHP

Since Sep 28Pushed 5y ago1 watchersCompare

[ Source](https://github.com/eis3nhorn/laravel-elasticbeanstalk-cron)[ Packagist](https://packagist.org/packages/eis3nhorn/laravel-elasticbeanstalk-cron)[ RSS](/packages/eis3nhorn-laravel-elasticbeanstalk-cron/feed)WikiDiscussions master Synced yesterday

READMEChangelogDependencies (4)Versions (4)Used By (0)

Lumen 6.0.\* and 7\* FORK Task Scheduler with Elastic Beanstalk
===============================================================

[](#lumen-60-and-7-fork-task-scheduler-with-elastic-beanstalk)

\*\*\* This Fork uses getenv to get vars (like USE\_CRON) defined in Elastic Beanstalk Environment instead of using config to read them as it seems to fail on Elastic Beanstalk as of December 4 2018, it has also been updated to work with 6.0 branch *Ensure one instance in an Elastic Beanstalk environment is running Laravel's Scheduler*

A common [problem](https://stackoverflow.com/questions/14077095/aws-elastic-beanstalk-running-a-cronjob) [many](http://culttt.com/2016/02/08/setting-up-and-using-cron-jobs-with-laravel-and-aws-elastic-beanstalk/) [people](https://medium.com/@joelennon/running-cron-jobs-on-amazon-web-services-aws-elastic-beanstalk-a41d91d1c571#.i53d41sci) have encountered with Amazon's [Elastic Beanstalk](https://aws.amazon.com/elasticbeanstalk/) is maintaining a single instance in an environment that runs Laravel's Task Scheduler. Difficulties arise because auto-scaling does not guarantee any instance is run indefinitely and there are no "master-slave" relationships within an environment to differentiate one instance from the rest.

Although Amazon has provided a [solution](http://stackoverflow.com/a/28719447/1469797) it involves setting up a worker tier and then, potentially, creating new routes/methods for implementing the tasks that need to be run. Yuck!

**This package provides a simple, zero-setup solution for maintaining one instance within an Elastic Beanstalk environment that runs the Task Scheduler.**

How Does It Work?
-----------------

[](#how-does-it-work)

Glad you asked! The below process **is completely automated** and only requires that you publish the `.ebextensions` folder to the root of your application.

### 1. Use Elastic Beanstalk's Advanced Configuration to run CRON setup commands

[](#1-use-elastic-beanstalks-advanced-configuration-to-run-cron-setup-commands)

EB applications can contain a [folder](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions.html) that provides advanced configuration for an EB environment, called `.ebextensions`.

This package provides a configuration file that runs two commands on deployment (every instance initialization) that setup the conditions needed to run the Task Schedler on one instance:

### 2. Run `system:start:leaderselection`

[](#2-run-systemstartleaderselection)

This is the first command that is run on deployment. It configures the instance's Cron to run **Leader Selection** at a configured interval (default = 5 minutes)

### 3. Run **Leader Selection** `aws:configure:leader`

[](#3-run-leader-selection-awsconfigureleader)

This is the **Leader Selection** command. It does the following:

- Get the Id of the Instance this deployment is running on
- Get the `EnvironmentName` of this Instance. (When running in an EB environment all EC2 instances have the same `EnvironmentName`)
- Get all running EC2 instances with that `EnvironmentName`
- Find the **earliest launched instance**

If this instance is the earliest launched then it is deemed the **Leader** and runs `system:start:cron`

### 4. Run `system:start:cron`

[](#4-run-systemstartcron)

This command is run **only if the current instance running Leader Selection is the Leader**. It inserts another entry in the instance's Cron to run [Laravel's Scheduler](https://laravel.com/docs/5.1/scheduling).

### That's it!

[](#thats-it)

Now only one instance, the earliest launched, will have the scheduler inserted into its Cron. If that instance is terminated by auto-scaling a new Leader will be chosen within 5 minutes (or the configured interval) from the remaining running instances.

Installation
------------

[](#installation)

Require this package

```
composer require "eis3nhorn/laravel-elasticbeanstalk-cron"
```

After adding the package, add the ServiceProvider to the providers array in `config/app.php`

```
\eis3nhorn\LaravelElasticBeanstalkCron\ElasticBeanstalkCronProvider::class
```

Then, publish the **.ebextensions** folder and configuration file.

```
php artisan vendor:publish --tag=ebcron
```

Configuration
-------------

[](#configuration)

In order for Leader Selection to run a few environmental variables must be present:

- **USE\_CRON** = true -- Must be set in order for Leader Selection to occur. (This can be used to prevent Selection from occurring on undesired environments IE Workers, etc.)
- **AWS\_ACCESS\_KEY\_ID** -- Needed for read-only access to ec2 client
- **AWS\_SECRET\_ACCESS\_KEY** -- Needed for read-only access to ec2 client
- **AWS\_REGION** -- Sets which AWS region when looking using the ec2 client, defaults to `us-east-1` if not set.

These can be included in your **.env** or, for EB, in the environment's configuration section.

Contributing
------------

[](#contributing)

Make a PR for some extra functionality and I will happily accept it :)

License
-------

[](#license)

This package is licensed under the [MIT license](https://github.com/eis3nhorn/laravel-elasticbeanstalk-cron/blob/master/LICENSE.txt).

###  Health Score

25

—

LowBetter than 37% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity6

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity55

Maturing project, gaining track record

 Bus Factor3

3 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~189 days

Total

3

Last Release

3135d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/7c52dd716d2f29f47bb1823ade5befb11a687f2e40409120257dac04f155136a?d=identicon)[eis3nhorn](/maintainers/eis3nhorn)

---

Top Contributors

[![FoxxMD](https://avatars.githubusercontent.com/u/4663766?v=4)](https://github.com/FoxxMD "FoxxMD (10 commits)")[![eis3nhorn](https://avatars.githubusercontent.com/u/17926316?v=4)](https://github.com/eis3nhorn "eis3nhorn (8 commits)")[![jhagel](https://avatars.githubusercontent.com/u/11066431?v=4)](https://github.com/jhagel "jhagel (7 commits)")[![Jono20201](https://avatars.githubusercontent.com/u/2374192?v=4)](https://github.com/Jono20201 "Jono20201 (6 commits)")[![heathdutton](https://avatars.githubusercontent.com/u/302215?v=4)](https://github.com/heathdutton "heathdutton (5 commits)")[![coindwarf](https://avatars.githubusercontent.com/u/37026808?v=4)](https://github.com/coindwarf "coindwarf (1 commits)")

### Embed Badge

![Health badge](/badges/eis3nhorn-laravel-elasticbeanstalk-cron/health.svg)

```
[![Health](https://phpackages.com/badges/eis3nhorn-laravel-elasticbeanstalk-cron/health.svg)](https://phpackages.com/packages/eis3nhorn-laravel-elasticbeanstalk-cron)
```

###  Alternatives

[hammerstone/sidecar

A Laravel package to deploy Lambda functions alongside your main application.

8832.7M11](/packages/hammerstone-sidecar)[sammyjo20/lasso

Lasso - Asset wrangling for Laravel made simple.

355347.9k](/packages/sammyjo20-lasso)[spatie/laravel-prometheus

Export Laravel metrics to Prometheus

2651.3M6](/packages/spatie-laravel-prometheus)[fumeapp/modeltyper

Generate TypeScript interfaces from Laravel Models

196277.9k](/packages/fumeapp-modeltyper)[stechstudio/laravel-env-security

Securely manage .env files for different deployment environments

77116.4k1](/packages/stechstudio-laravel-env-security)[napp/xray-laravel

AWS X-Ray for Laravel applications.

61407.3k](/packages/napp-xray-laravel)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
