flexic / scheduler
Provides an scheduler extension.
Installs: 185
Dependents: 1
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 1
Open Issues: 0
pkg:composer/flexic/scheduler
Requires
- php: ^8.1
- dragonmantank/cron-expression: ^3.3.2
- flexic/cron-builder: ^1.0.0
- psr/log: ^3.0.0
- symfony/console: ^6.1.0
- symfony/event-dispatcher: ^6.1.0
- symfony/options-resolver: ^6.1.0
Requires (Dev)
- ergebnis/php-cs-fixer-config: ^4.9.0
- phpstan/phpstan: ^1.8.8
- phpstan/phpstan-deprecation-rules: ^1.0.0
- phpstan/phpstan-strict-rules: ^1.4.4
README
PHP Schedule is a simple library for scheduling tasks in PHP.
It is inspired by the Laravel Scheduler and Symfony Messenger.
Installation
Run
composer require flexic/scheduler
to install flexic/scheduler.
Setup Events to schedule
class MyScheduleEvent implements \Flexic\Scheduler\Interfaces\AbstractScheduleEventInterface { public function __invoke(): void { // ... do something } public function configure(Flexic\Scheduler\Interfaces\ScheduleInterface $schedule): void { $schedule->cron('* * * * *'); } }
Schedule events are classes that implement the ScheduleEventInterface.
Inside the configure method, you can use the Schedule object to define when the event should be scheduled to run.
Setup Schedule Worker (Console Command)
Run
php bin/schedule ./path/to/event_config.php ./path/to/event_config_1.php
to start the schedule worker. Worker will automatically load all events from the given config files and run them.
Options
| Option | Description | Format | Default |
|---|---|---|---|
| limit | Limits the worker to the give number. Worker stops automatically if number if max Event runs exceeded. | int | - |
| timeLimit | Worker stops automatically after given time. | int (seconds) | - |
| intervalLimit | Worker stops automatically after give amount of intervals. | int | - |
| memoryLimit | Worker stops automatically if usage of memory exceeds the given limit. | int (bytes) | - |
| parallel | Worker runs events in parallel if set to true. | boolean | false |
| parallelLimit | Let worker run only defined amount of parallel runs at same time. | int | - |
Setup Schedule Worker (own script)
# Options for worker $options = []; $events = [ new MyScheduleEvent(), ]; $worker = new \Flexic\Scheduler\Worker( new Flexic\Scheduler\Configuration\WorkerConfiguration($options), $events, new \Symfony\Component\EventDispatcher\EventDispatcher(), ); $worker->start();
ScheduleEvent Factory
The ScheduleEventInterface is implemented to allow the usage of a factory to create the event. This is useful if you want to use a dependency injection container to create the event.
class MyScheduleEventFactory implements \Flexic\Scheduler\Interfaces\ScheduleEventFactoryInterface { public function create(): array { return [ new MyScheduleEvent('foo'), new MyScheduleEvent('bar'), ]; } }
Schedule API
| Method | Description |
|---|---|
| cron($expression) | Schedule the event on a Cron expression. |
| timezone($timezone) | Set the timezone the expression should run in. |
| minute($minute) | Set minutes to cron expression |
| hour($hour) | Set hours to cron expression |
| day($day) | Set days to cron expression |
| month($month) | Set months to cron expression |
| dayOfWeek($day) | Set days of week to cron expression |
| builder() | Return an instance of flexic/cron-builder. |
cron() method accepts string, or objects of type CronBuilder & Cron of flexic/cron-builder.
Methods for tokens allows usage of Expressions from flexic/cron-builder.
Worker API
| Method | Description |
|---|---|
| start() | Starts the worker. |
| stop() | Stops the worker. |
| restart() | Reinitialize and restarts the worker. |
| update($configuration, $scheduleEvents) | Update the worker and starts with new configuration. |
Worker Lifecycle Events
| Event Name | Description |
|---|---|
| Worker Lifecycle | Flexic\Scheduler\Event\Event\Lifecycle\<EventName> |
| WorkerInitializedEvent | Executed when worker is initialized. |
| WorkerStartEvent | Executed when worker is started. |
| WorkerStopEvent | Executed when worker is stopped. |
| WorkerRestartEvent | Executed when worker is restarted. |
| WorkerUpdateEvent | Executed everytime the worker is updated. |
| Run Lifecycle | Flexic\Scheduler\Event\Event\Run\<EventName> |
| WorkerRunStartEvent | Executed everytime an event is started to process. |
| WorkerRunEnvEvent | Executed everytime an event is finished to process. |
| Interval Lifecycle | Flexic\Scheduler\Event\Event\Interval\<EventName> |
| WorkerIntervalStartEvent | Executed everytime a interval is started. |
| WorkerIntervalEndEvent | Executed everytime a interval is finished. |
| Execution Lifecycle | Flexic\Scheduler\Event\Event\Execute\<EventName> |
| WorkerExecuteEvent | Executed everytime an event is executed. |
| WorkerExecuteSequentialEvent | Executed everytime an event is executed sequentially. |
| WorkerExecuteParallelStartEvent | Executed everytime an event is executed parallel. |
| WorkerExecuteParallelResumeEvent | Executed everytime an parallel executed event is resumed. |
License
This package is licensed using the GNU License.
Please have a look at LICENSE.md.