switon / schedule
Recurring scheduled tasks with a shared app clock, discovery, and optional Redis locking for Switon Framework
v1.0.0
2026-06-07 04:56 UTC
Requires
- php: >=8.3
- psr/container: ^2.0
- psr/event-dispatcher: ^1.0
- switon/cli: ^1.0
- switon/composer-extra: ^1.0
- switon/core: ^1.0
- switon/event: ^1.0
- switon/executor: ^1.0
- switon/redis: ^1.0
Requires (Dev)
- phpstan/extension-installer: ^1.4
- phpstan/phpstan: ^2.0
- switon/testing: ^1.0
README
Switon's scheduled task layer for #[Scheduled] runners, task discovery, locking, and CLI execution.
Highlights
- Task registration:
#[Scheduled]declares scheduled work on runner classes. - Automatic discovery: app task paths and package metadata are scanned.
- Task execution:
TaskRunnermatches schedules and dispatches tasks. - Distributed locking: Redis-backed exclusivity is available across replicas.
- CLI control:
ScheduleCommandcovers work, run, list, and task inspection.
Installation
composer require switon/schedule
Quick Start
use Switon\Core\RunnerInterface; use Switon\Schedule\Attribute\Scheduled; #[Scheduled('0 * * *', lockTtl: 60)] final class PurgeStaleSessionsTask implements RunnerInterface { public function run(mixed $payload): mixed { return null; } }
bash bin/console schedule:list bash bin/console schedule:run
Docs: https://docs.switon.dev/latest/schedule
License
MIT.