Installation:
composer require babymarkt/cron-bundle
Enable the bundle in config/bundles.php:
Babymarkt\Symfony\CronBundle\BabymarktCronBundle::class => ['all' => true],
Basic Configuration (config/packages/babymarkt_cron.yaml):
babymarkt_cron:
cronjobs:
my_first_job: 'app:command-name'
First Sync:
php bin/console babymarkt-cron:sync --env=prod
Define a job to run a Symfony command (e.g., app:send-daily-emails) every hour:
babymarkt_cron:
cronjobs:
send_emails:
command: 'app:send-daily-emails'
minutes: 0
hours: '*'
Command-Based Jobs:
app:generate-reports).babymarkt_cron:
cronjobs:
generate_reports:
command: 'app:generate-reports'
arguments: ['--user-id=123', '--format=csv']
Environment-Specific Jobs:
php bin/console babymarkt-cron:sync --env=prod
disabled: true in config.Logging and Output:
/var/log/cron.log):
babymarkt_cron:
options:
output:
file: '/var/log/cron.log'
append: true
Dependency Management:
babymarkt_cron:
cronjobs:
run_migrations:
command: 'doctrine:migrations:migrate'
minutes: 0
hours: 3
Conditional Jobs:
babymarkt_cron:
cronjobs:
backup_db:
command: 'app:backup-db'
disabled: true # Disabled until manually enabled
Custom Scripts:
script option to override bin/console:
babymarkt_cron:
options:
script: './custom-script.sh'
Multi-Environment Blocks:
id to manage separate crontab blocks per environment:
babymarkt_cron:
options:
id: 'myapp_prod'
Permissions:
www-data) has write access to:
chmod -R 755 var/).sudo crontab -u www-data -e
Cron Syntax Errors:
babymarkt-cron:dump before syncing:
php bin/console babymarkt-cron:dump --env=prod
Environment Mismatches:
--env when syncing to avoid mixing environments:
php bin/console babymarkt-cron:sync --env=prod # Never use 'dev' in production!
Output Redirection:
/dev/null in production for debugging:
babymarkt_cron:
options:
output:
file: '/var/log/myapp_cron.log'
Check Existing Crontab:
crontab -l -u www-data # Replace 'www-data' with your cron user
Test Locally:
babymarkt-cron:report (requires Doctrine) to track job executions:
php bin/console babymarkt-cron:report
Manual Overrides:
/tmp/crontab.<user> (auto-generated by the bundle).Custom Command Handlers:
Babymarkt\Symfony\CronBundle\Command\SyncCommand to add pre/post-sync logic.Dynamic Config:
CronJobLoader service.Sudo Support:
babymarkt_cron:
options:
crontab:
sudo: true
Artisan Commands:
my:symfony:command with Laravel’s command:name format:
babymarkt_cron:
cronjobs:
optimize: 'optimize:clear'
Environment Variables:
.env variables in cronjobs by referencing them in arguments:
babymarkt_cron:
cronjobs:
send_emails:
command: 'mail:send'
arguments: ['--queue=high', '--env=${APP_ENV}']
Service Providers:
config/app.php under providers:
Babymarkt\Symfony\CronBundle\BabymarktCronBundle::class,
Queue Workers:
php artisan queue:work --daemon
babymarkt_cron:
cronjobs:
queue_worker:
command: 'queue:work'
minutes: '*'
hours: '*'
disabled: false
How can I help you explore Laravel packages today?