https://github.com/synolia/SyliusSchedulerCommandPlugin
Schedule Symfony Commands in your Sylius
https://github.com/synolia/SyliusSchedulerCommandPlugin
sylius sylius-plugin
Last synced: 2 months ago
JSON representation
Schedule Symfony Commands in your Sylius
- Host: GitHub
- URL: https://github.com/synolia/SyliusSchedulerCommandPlugin
- Owner: synolia
- License: mit
- Created: 2020-01-08T16:42:11.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2025-03-22T20:48:23.000Z (3 months ago)
- Last Synced: 2025-04-04T12:07:12.513Z (2 months ago)
- Topics: sylius, sylius-plugin
- Language: PHP
- Homepage:
- Size: 572 KB
- Stars: 31
- Watchers: 11
- Forks: 22
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
[](https://github.com/synolia/SyliusSchedulerCommandPlugin/blob/master/LICENSE)
[](https://github.com/synolia/SyliusSchedulerCommandPlugin/actions/workflows/analysis.yaml)
[](https://github.com/synolia/SyliusSchedulerCommandPlugin/actions/workflows/sylius.yaml)
[](https://packagist.org/packages/synolia/sylius-scheduler-command-plugin)
[](https://packagist.org/packages/synolia/sylius-scheduler-command-plugin)Scheduler Command Plugin
![]()
Schedule Symfony Commands in your Sylius admin panel.
## Commands list
## Scheduled Commands list
## Features
* See the list of planned command
* Add, edit, enable/disable or delete scheduled commands
* For each command, you have to define :
* Name
* Selected Command from the list of Symfony commands
* Based on Cron schedule expression see [Cron formats](https://abunchofutils.com/u/computing/cron-format-helper/)
* Output Log file prefix (optional)
* Priority (highest is priority)
* Run the Command immediately (at the next passage of the command `synolia:scheduler-run`)
* Run a Command juste one time (from history page clic on `Launch a command` button)
* Download or live view of log files directly from the admin panel
* Define commands with a Factory (from a Doctrine migration, for example)## Requirements
| | Version |
|:-------|:--------|
| PHP | ^8.2 |
| Sylius | ^1.12 |## Installation
1. Add the bundle and dependencies in your composer.json :
composer config extra.symfony.allow-contrib true
composer req synolia/sylius-scheduler-command-plugin2. Apply migrations to your database:
bin/console doctrine:migrations:migrate3. Launch Run command in your Crontab
* * * * * /_PROJECT_DIRECTORY_/bin/console synolia:scheduler-run
4. (optional) Showing humanized cron expression
composer require lorisleiva/cron-translator
5. Till `symfony/recipes-contrib` is updated for the v3, you must add `sylius_scheduler_command.yaml` from `install/Application/config/{packages,routes}` to your project by respecting the same folder architecture.
cp -R vendor/synolia/sylius-scheduler-command-plugin/install/Application/config/packages/* config/packages/
cp -R vendor/synolia/sylius-scheduler-command-plugin/install/Application/config/routes/* config/routes/## Usage
* Log into admin panel
* Click on `Scheduled commands` in the Scheduled commands section in main menu to manage your Scheduled commands
* Click on `Scheduled commands history` in the Scheduled commands section in main menu to see history of commands## Fixtures
Inside sylius fixture file `config/packages/sylius_fixtures.yaml` you can add scheduled command fixtures to your suite.
```yaml
sylius_fixtures:
suites:
my_fixture_suite:
fixtures:
scheduler_command:
options:
scheduled_commands:
-
name: 'Reset Sylius'
command: 'sylius:fixtures:load'
cronExpression: '0 0 * * *'
logFilePrefix: 'reset'
priority: 0
enabled: true
-
name: 'Cancel Unpaid Orders'
command: 'sylius:cancel-unpaid-orders'
cronExpression: '0 0 * * *'
priority: 1
enabled: false
```## Commands
### synolia:scheduler-runExecute scheduled commands.
* options:
* --id (run only a specific scheduled command)**Run all scheduled commands :** php bin/console synolia:scheduler-run
**Run one scheduled command :** php bin/console synolia:scheduler-run --only-one
**Run a specific scheduled command :** php bin/console synolia:scheduler-run --id=5
Is it possible to choose the timezone of the command execution by setting the `SYNOLIA_SCHEDULER_PLUGIN_TIMEZONE` environment variable, example:
```
SYNOLIA_SCHEDULER_PLUGIN_TIMEZONE=Europe/Paris
```### synolia:scheduler:purge-history
Purge scheduled command history greater than {X} days old.
* options:
* --all (purge everything)
* --days (number of days to keep)
* --state (array of schedule states)
* --dry-run**Example to remove all finished and in error scheduled commands after 7 days :**
php bin/console synolia:scheduler:purge-history --state=finished --state=error --days=7
## Optional services
```yaml
services:
...
# By enabling this service, it will be requested to vote after the other EveryMinuteIsDueChecker checker.
# Using some cloud providers, even if the master cron is set to run every minute, it is actually not run that often
# This service allows you to set a soft threshold limit, so if your provider is actually running the master cron every 5 minutes
# This service will execute the cron if we are still in the threshold limit ONLY IF it was not already executed another time in the same range.
#
# CONFIGURATION SCENARIO: cron set to be run at 01:07 in the scheduler command plugin
#
# SCENARIO CASES AT 1 CRON PASS EVERY 5 MINUTES FROM THE PROVIDER
# cron passes at 01:04 - 1..5 minutes: IS NOT DUE
# cron passes at 01:05 - 1..5 minutes: IS NOT DUE
# cron passes at 01:06 - 1..5 minutes: IS NOT DUE
# cron passes at 01:07 - 1..5 minutes: IS DUE (but it should already be handled by EveryMinuteIsDueChecker)
# cron passes at 01:08 - 1..5 minutes: IS DUE
# cron passes at 01:09 - 1..5 minutes: IS DUE #should not if another has started during the threshold period
# cron passes at 01:10 - 1..5 minutes: IS DUE #should not if another has started during the threshold period
# cron passes at 01:11 - 1..5 minutes: IS DUE #should not if another has started during the threshold period
# cron passes at 01:12 - 1..5 minutes: IS DUE #should not if another has started during the threshold period
# cron passes at 01:13 - 1..5 minutes: IS NOT DUE
Synolia\SyliusSchedulerCommandPlugin\Checker\SoftLimitThresholdIsDueChecker:
tags:
- { name: !php/const Synolia\SyliusSchedulerCommandPlugin\Checker\IsDueCheckerInterface::TAG_ID }
#optionnal, default value is 5 minutes
arguments:
$threshold: 5 #soft limit threshold in minutes
```## Development
See [How to contribute](CONTRIBUTING.md).
## License
This library is under the MIT license.
## Credits
Developed by [Synolia](https://synolia.com/).