dukecity/command-scheduler-bundle
Symfony bundle to schedule console commands with cron expressions. Manage native and custom commands, backed by database storage and optional Doctrine migrations. Supports modern PHP/Symfony versions; see wiki for configuration, execution, and upgrade notes.
This bundle will allow you to easily manage scheduling for Symfony's console commands (native or not) with cron expression. See Wiki for Details
Please read Upgrade-News for Version 6
Version 7.x has the goal to use modern Php and Symfony features and low maintenance. So only PHP >= 8.4 and Symfony ^8.0 are supported at the moment.
The following table shows the compatibilities of different versions of the bundle :
| Version | Symfony | PHP |
|---|---|---|
| 7.x (main) | ^8.0 | >=8.4 |
| 6.x | ^7.0 + ^8.0 | >=8.2 |
| 5.x | ^5.4 + ^6.0 | >=8.0 |
| 4.x | ^4.4.20 + ^5.3 | >=8.0 |
| 3.x | ^4.4.20 + ^5.3 | >=7.3 |
| 2.2.x | ^3.4 + ^4.3 | ^7.1 |
When using Symfony Flex there is an installation recipe.
To use it, you have to enable contrib recipes on your project :
composer config extra.symfony.allow-contrib true
composer req dukecity/command-scheduler-bundle
If you're using DoctrineMigrationsBundle (recommended way):
php bin/console make:migration
php bin/console doctrine:migrations:migrate
Without DoctrineMigrationsBundle:
php bin/console doctrine:schema:update --force
php bin/console assets:install --symlink --relative public
Add this line to your security config.
- { path: ^/command-scheduler, role: ROLE_ADMIN }
Check new URL /command-scheduler/list
Please read Changelog



You can extend the default ScheduledCommand entity to add custom fields or behavior. The bundle uses a MappedSuperclass pattern with an interface for maximum flexibility.
BaseScheduledCommand:<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Dukecity\CommandSchedulerBundle\Entity\BaseScheduledCommand;
#[ORM\Entity]
#[ORM\Table(name: 'scheduled_command')]
class MyScheduledCommand extends BaseScheduledCommand
{
#[ORM\Column(type: 'string', nullable: true)]
private ?string $customField = null;
public function getCustomField(): ?string
{
return $this->customField;
}
public function setCustomField(?string $customField): static
{
$this->customField = $customField;
return $this;
}
}
# config/packages/dukecity_command_scheduler.yaml
dukecity_command_scheduler:
scheduled_command_class: App\Entity\MyScheduledCommand
php bin/console make:migration
php bin/console doctrine:migrations:migrate
ScheduledCommandInterface - Contract for all scheduled command entitiesBaseScheduledCommand - MappedSuperclass with all base properties and methodsScheduledCommand - Default concrete entity (used if no custom class configured)ScheduledCommandFactory - Service for creating entity instancesSee the documentation here.
This bundle is under the MIT license. See the complete license for info.
How can I help you explore Laravel packages today?