PHPackages                             foxxmd/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. [Utility &amp; Helpers](/categories/utility)
4. /
5. foxxmd/laravel-elasticbeanstalk-cron

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

foxxmd/laravel-elasticbeanstalk-cron
====================================

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

2.0.1(4mo ago)62299.6k↓23.4%17[3 PRs](https://github.com/FoxxMD/laravel-elasticbeanstalk-cron/pulls)MITPHP

Since Sep 28Pushed 3mo ago8 watchersCompare

[ Source](https://github.com/FoxxMD/laravel-elasticbeanstalk-cron)[ Packagist](https://packagist.org/packages/foxxmd/laravel-elasticbeanstalk-cron)[ RSS](/packages/foxxmd-laravel-elasticbeanstalk-cron/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (10)Dependencies (4)Versions (15)Used By (0)

Laravel 6 - 12.x Task Scheduler with Elastic Beanstalk
======================================================

[](#laravel-6---12x-task-scheduler-with-elastic-beanstalk)

*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.**

Amazon Linux 1 is deprecated and Amazon Linux 2023 is recommended
-----------------------------------------------------------------

[](#amazon-linux-1-is-deprecated-and-amazon-linux-2023-is-recommended)

Amazon Linux 1 (AL1) is already retired, even Amazon Linux 2 (AL2) will soon going to be unsupported too, so it's recommended to migrate to use Amazon Linux 2023 (AL2023) Starts from this release will only support AL2023, please use previous releases for use in AL2, with this release will also drop support for Laravel 5 (PHP 7) since EB only support starting from PHP 8.1

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

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

Glad you asked! The below process **is completely automated** and only requires that you publish the `.platform` 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 since AL2 can contain [platform hooks](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/platforms-linux-extend.html) that provides advanced configuration for an EB environment, called `.platform`.

This package provides a configuration file that runs two commands on deployment (every instance initialization) that setup the conditions needed to run the Task Scheduler 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/12.x/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 "foxxmd/laravel-elasticbeanstalk-cron"
```

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

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

Don't forget to add +x permission to the EB Platform Hooks scripts ([no longer required for Amazon Linux platform that released on or after April 29, 2022](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/platforms-linux-extend.hooks.html#platforms-linux-extend.hooks.more))

```
find .platform -type f -iname "*.sh" -exec chmod +x {} +
```

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\_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. Package will use EC2 instance profile for AWS calls.

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/FoxxMD/laravel-elasticbeanstalk-cron/blob/master/LICENSE.txt).

###  Health Score

59

—

FairBetter than 99% of packages

Maintenance80

Actively maintained with recent releases

Popularity49

Moderate usage in the ecosystem

Community21

Small or concentrated contributor base

Maturity71

Established project with proven stability

 Bus Factor2

2 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 ~261 days

Recently: every ~397 days

Total

14

Last Release

128d ago

Major Versions

0.9 → 1.02021-08-19

1.3 → 2.0.02025-03-17

### Community

Maintainers

![](https://www.gravatar.com/avatar/e034a2b4c63a810f72067441ec19dce7d9993a7fad0f1b27dd5734a4a2ad8070?d=identicon)[FoxxMD](/maintainers/FoxxMD)

---

Top Contributors

[![MbahDjoe](https://avatars.githubusercontent.com/u/2148158?v=4)](https://github.com/MbahDjoe "MbahDjoe (19 commits)")[![FoxxMD](https://avatars.githubusercontent.com/u/4663766?v=4)](https://github.com/FoxxMD "FoxxMD (11 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)")[![MichaelHoughton](https://avatars.githubusercontent.com/u/5341149?v=4)](https://github.com/MichaelHoughton "MichaelHoughton (3 commits)")[![hugoboss17](https://avatars.githubusercontent.com/u/10523100?v=4)](https://github.com/hugoboss17 "hugoboss17 (1 commits)")

---

Tags

awscroneb-environmentelasticbeanstalklaravellaravel-scheduler

### Embed Badge

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

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

###  Alternatives

[barryvdh/laravel-ide-helper

Laravel IDE Helper, generates correct PHPDocs for all Facade classes, to improve auto-completion.

14.9k123.0M687](/packages/barryvdh-laravel-ide-helper)[wnx/laravel-stats

Get insights about your Laravel Project

1.8k1.8M7](/packages/wnx-laravel-stats)[orchestra/canvas

Code Generators for Laravel Applications and Packages

20917.2M158](/packages/orchestra-canvas)[napp/xray-laravel

AWS X-Ray for Laravel applications.

61407.3k](/packages/napp-xray-laravel)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

245.2k](/packages/aedart-athenaeum)[interaction-design-foundation/laravel-geoip

Support for multiple Geographical Location services.

17221.0k3](/packages/interaction-design-foundation-laravel-geoip)

PHPackages © 2026

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