Search by

alexandrebulete / ddd-scheduler-bundle

Alexandre Buleté

See and run your Symfony Scheduler tasks from the back office: a read-only catalogue (command, cron, next run, last run and status) with a one-click manual run, built on Symfony Scheduler and Messenger.

Package info

github.com/AlexandreBulete/ddd-scheduler-bundle

Type:symfony-bundle

pkg:composer/alexandrebulete/ddd-scheduler-bundle

Statistics

Installs: 16

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.1.0 2026-10-23 13:27 UTC

This package is auto-updated.

Last update: 2026-10-23 13:40:19 UTC


README

See and run your Symfony Scheduler tasks from the back office.

A read-only catalogue of every recurring task — command, description, cron expression, next planned run, last observed run and its status — under System -> Schedules, with a one-click manual run. Each task has its own page: what it does, its next runs, and the history of its runs (scheduled or manual). Run outcomes are projected into a small scheduler_run read model from the Messenger worker events.

Standalone: no domain, no project notion. The schedules are declared in configuration.

Configuration

# config/packages/scheduler.yaml
scheduler:
    schedules:
        - command: 'outbox:purge'
          cron: '0 3 * * 0'
          description: |
              Removes the tracking of async tasks that succeeded more than 30 days ago.

              Failed tasks are never removed. If it fails, nothing is urgent.
        - { command: 'activity:purge', cron: '30 3 * * 0' }
    admin:
        enabled: true          # the back-office screen
        grid_limits: [25, 50, 100]

The schedule is named default, so Symfony Scheduler exposes it on the scheduler_default transport. For the tasks to actually fire, a worker must consume it:

php bin/console messenger:consume scheduler_default async

description is optional: without it, the task page shows the console command's own description. Line breaks are kept.

The catalogue screen works regardless; "last run / status" and the history fill in once the worker has run the tasks. A manual Run goes through the async transport and is recorded too, with the origin "manual".

Upgrading from 1.0

Run the bundle's migrations: 1.1 adds an origin column to scheduler_run (default schedule, so existing rows stay valid).