PHPackages                             caeligo/scheduler-bundle - 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. [Admin Panels](/categories/admin)
4. /
5. caeligo/scheduler-bundle

ActiveSymfony-bundle[Admin Panels](/categories/admin)

caeligo/scheduler-bundle
========================

File-based task scheduler bundle for Symfony with CLI and web dashboard

v1.1.0(2d ago)00MITPHPPHP &gt;=8.2

Since Mar 20Pushed 2d agoCompare

[ Source](https://github.com/biga156/scheduler-bundle)[ Packagist](https://packagist.org/packages/caeligo/scheduler-bundle)[ RSS](/packages/caeligo-scheduler-bundle/feed)WikiDiscussions main Synced today

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

Caeligo Scheduler Bundle
========================

[](#caeligo-scheduler-bundle)

A file-based task scheduler bundle for Symfony with a built-in web dashboard and full CLI management.

[![License: MIT](https://camo.githubusercontent.com/08cef40a9105b6526ca22088bc514fbfdbc9aac1ddbf8d4e6c750e3a88a44dca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d626c75652e737667)](LICENSE)

Why Caeligo?
------------

[](#why-caeligo)

- **No database required** — Fully file-based storage. No Doctrine, no migrations, no extra infrastructure. Install and run in minutes.
- **Built-in web dashboard** — A standalone, ready-to-use Twig UI ships with the bundle. Manage tasks, browse logs, and control your crontab — all from the browser, out of the box.
- **Native PHP attribute discovery** — Use the modern `#[AsSchedulableCommand]` attribute on your commands. No YAML task definitions, no manual registration, no separate entity classes.
- **Crontab management from CLI and web** — Install or uninstall your system crontab entry with a single command or a button click. No manual server configuration needed.
- **Shared hosting friendly** — Works without long-running workers, message queues, or Redis. A simple cron job is all you need. An HTTP trigger fallback is also available.

Features
--------

[](#features)

- **Cron expressions &amp; simple intervals** — Both scheduling modes supported
- **10 CLI commands** — Full terminal-based management: list, status, enable, disable, run, logs, purge, install, uninstall, and more
- **Overlap prevention** — Skip task execution when a previous run is still in progress
- **Role-based access** — Configurable role requirements for dashboard and crontab management
- **CSRF protection** — All dashboard POST actions are CSRF-protected
- **Automatic log retention** — Old execution logs are cleaned up automatically
- **EasyAdmin integration** — Optional integration for projects already using EasyAdmin
- **Zero-config defaults** — Sensible defaults let you get started with minimal configuration

Requirements
------------

[](#requirements)

- PHP 8.2+
- Symfony 6.4 or 7.x
- No database or additional services required

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

[](#installation)

```
composer require caeligo/scheduler-bundle
```

### Enable the Bundle

[](#enable-the-bundle)

If you're not using Symfony Flex, add the bundle to `config/bundles.php`:

```
return [
    // ...
    Caeligo\SchedulerBundle\CaeligoSchedulerBundle::class => ['all' => true],
];
```

### Configure Routes

[](#configure-routes)

Create `config/routes/caeligo_scheduler.yaml`:

```
caeligo_scheduler:
    resource: '@CaeligoSchedulerBundle/config/routes.yaml'
    prefix: /scheduler
```

### Basic Configuration

[](#basic-configuration)

Create `config/packages/caeligo_scheduler.yaml`:

```
caeligo_scheduler:
    route_prefix: '/scheduler'
    role_dashboard: 'ROLE_ADMIN'
    role_crontab: 'ROLE_SUPER_ADMIN'
    default_timeout: 300
```

> For all configuration options, see [Configuration Reference](docs/configuration.md).

Quick Start
-----------

[](#quick-start)

### 1. Make a Command Schedulable

[](#1-make-a-command-schedulable)

Add the `#[AsSchedulableCommand]` attribute to any Symfony console command:

```
use Caeligo\SchedulerBundle\Attribute\AsSchedulableCommand;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;

#[AsCommand(name: 'app:cleanup:expired')]
#[AsSchedulableCommand(
    description: 'Remove expired records from the database',
    defaultExpression: '0 3 * * *',
    group: 'maintenance',
)]
class CleanupExpiredCommand extends Command
{
    // ...
}
```

### 2. Install the Crontab

[](#2-install-the-crontab)

```
php bin/console caeligo:scheduler:install
```

This adds a crontab entry that runs the scheduler every minute:

```
* * * * * cd '/path/to/project' && '/usr/bin/php' bin/console caeligo:scheduler:run >> /dev/null 2>&1 # caeligo-scheduler

```

### 3. Enable Tasks

[](#3-enable-tasks)

```
php bin/console caeligo:scheduler:enable app:cleanup:expired
```

Or use the web dashboard at `/scheduler`.

### 4. Verify

[](#4-verify)

```
php bin/console caeligo:scheduler:list
php bin/console caeligo:scheduler:status
```

CLI Commands
------------

[](#cli-commands)

CommandDescription`caeligo:scheduler:run`Run overdue scheduled tasks (crontab entry point)`caeligo:scheduler:list`List all discovered schedulable commands`caeligo:scheduler:status`Show overall scheduler health and status`caeligo:scheduler:run-now `Execute a specific task immediately`caeligo:scheduler:enable `Enable a scheduled task`caeligo:scheduler:disable `Disable a scheduled task`caeligo:scheduler:install`Install the scheduler crontab entry`caeligo:scheduler:uninstall`Remove the scheduler crontab entry`caeligo:scheduler:logs`Show recent task execution logs`caeligo:scheduler:purge-logs [command]`Purge execution logs (all or per task)> For detailed CLI usage, see [CLI Reference](docs/cli.md).

Web Dashboard
-------------

[](#web-dashboard)

A standalone web dashboard ships with the bundle — no separate admin package or frontend build step needed. Available at the configured `route_prefix` (default: `/scheduler`).

- **Tasks** — View, enable/disable, edit, and run tasks directly from the browser
- **Logs** — View execution history with full output details and status indicators. Clear logs per task or globally.
- **Settings** — Install or remove the system crontab entry with a single click

> For dashboard details, see [Dashboard Guide](docs/dashboard.md).

Documentation
-------------

[](#documentation)

DocumentDescription[Configuration Reference](docs/configuration.md)All configuration options in detail[CLI Reference](docs/cli.md)Detailed usage of all 9 console commands[Dashboard Guide](docs/dashboard.md)Web dashboard features and usage[Scheduling Guide](docs/scheduling.md)Cron expressions, intervals, and task options[Architecture &amp; Storage](docs/architecture.md)File-based storage, locking, and internals[Security](docs/security.md)Role-based access, CSRF, and security considerations[HTTP Trigger](docs/http-trigger.md)Shared hosting fallback via HTTP trigger[EasyAdmin Integration](docs/easyadmin.md)Optional EasyAdmin dashboard integration[Testing](docs/testing.md)Running the test suiteMakefile Integration (Optional)
-------------------------------

[](#makefile-integration-optional)

If your project uses a Makefile (common in Symfony projects), you can add convenient shortcut targets:

```
SYMFONY_CONSOLE = php bin/console

cron-list: ## List all schedulable commands
	@$(SYMFONY_CONSOLE) caeligo:scheduler:list

cron-status: ## Scheduler health status
	@$(SYMFONY_CONSOLE) caeligo:scheduler:status

cron-run: ## Run overdue tasks once
	$(SYMFONY_CONSOLE) caeligo:scheduler:run

cron-run-task: ## Run a specific task (usage: make cron-run-task CMD=app:my:command)
ifndef CMD
	@echo "ERROR: CMD is required. Usage: make cron-run-task CMD=app:some:command"
	@exit 1
endif
	$(SYMFONY_CONSOLE) caeligo:scheduler:run-now $(CMD)

cron-logs: ## Show scheduler execution logs
	@$(SYMFONY_CONSOLE) caeligo:scheduler:logs

cron-logs-purge: ## Purge all scheduler logs
	@$(SYMFONY_CONSOLE) caeligo:scheduler:purge-logs

cron-install: ## Install crontab entry
	$(SYMFONY_CONSOLE) caeligo:scheduler:install

cron-uninstall: ## Uninstall crontab entry
	$(SYMFONY_CONSOLE) caeligo:scheduler:uninstall
```

License
-------

[](#license)

MIT — see [LICENSE](LICENSE).

###  Health Score

40

—

FairBetter than 88% of packages

Maintenance99

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity48

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

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 ~1 days

Total

3

Last Release

2d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/6f1738e4aaa964821919352c90570f60dd0ea4517f2b7bcf00eec08264c7d58f?d=identicon)[biga156](/maintainers/biga156)

---

Top Contributors

[![biga156](https://avatars.githubusercontent.com/u/25263934?v=4)](https://github.com/biga156 "biga156 (16 commits)")

---

Tags

schedulersymfonybundlecrontaskdashboard

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/caeligo-scheduler-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/caeligo-scheduler-bundle/health.svg)](https://phpackages.com/packages/caeligo-scheduler-bundle)
```

###  Alternatives

[sonata-project/admin-bundle

The missing Symfony Admin Generator

2.1k18.7M286](/packages/sonata-project-admin-bundle)[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.3M128](/packages/sulu-sulu)[jmose/command-scheduler-bundle

This Symfony bundle will allow you to schedule all your commands just like UNIX crontab

3301.4M1](/packages/jmose-command-scheduler-bundle)[dukecity/command-scheduler-bundle

This Symfony bundle will allow you to schedule all your commands just like UNIX crontab

26343.0k3](/packages/dukecity-command-scheduler-bundle)[rewieer/taskschedulerbundle

Task Scheduler with CRON for Symfony

63238.5k](/packages/rewieer-taskschedulerbundle)[shapecode/cron-bundle

This bundle provides scheduled execution of Symfony commands

57479.5k2](/packages/shapecode-cron-bundle)

PHPackages © 2026

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