Schedule Symfony Commands in your Sylius admin panel.
- 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
- 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)
Version | |
---|---|
PHP | ^8.0 |
Sylius | ^1.10 |
-
Add the bundle and dependencies in your composer.json :
composer config extra.symfony.allow-contrib true composer req synolia/sylius-scheduler-command-plugin
-
Apply migrations to your database:
bin/console doctrine:migrations:migrate
-
Launch Run command in your Crontab
* * * * * /_PROJECT_DIRECTORY_/bin/console synolia:scheduler-run
-
(optional) Showing humanized cron expression
composer require lorisleiva/cron-translator
-
Till
symfony/recipes-contrib
is updated for the v3, you must addsylius_scheduler_command.yaml
frominstall/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/
- 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
Inside sylius fixture file config/packages/sylius_fixtures.yaml
you can add scheduled command fixtures to your suite.
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
Execute 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 --id=5
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
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
See How to contribute.
This library is under the MIT license.
Developed by Synolia.