Comme son nom l’indique, ou pas, ce bundle permets de générer un fichier pour vos tâches crons liées à un projet.
https://github.com/lexik/LexikCronFileGeneratorBundle
Au lieu de maintenir un document listant toutes les crons à définir sur vos serveurs, le bundle propose une configuration yaml pour enregistrer vos crons par environnement et par “serveur”.
Ci-dessous la configuration que vous allez pouvoir définir, exemple avec 2 environnements :
- deux environnements : prod et staging
- un utilisateur sur vos serveurs par environnement : project_prod et project_staging
- une seule version de php (la règle est volontairement stricte à ce sujet, mélanger les versions de php en preprod et prod est une mauvaise pratique)
- le chemin absolu vers votre projet
- la destination où le fichier sera généré
- une liste de crons par environnement
Ce qui donne avec le bundle :
lexik_cron_file_generator: env_available: # declare your env availables - staging # exemple: staging and prod - prod user: staging: project_staging prod: project_prod php_version: php7.3 absolute_path: staging: path/to/staging/bin/console prod: path/to/prod/bin/console output_path: '%kernel.cache_dir%/cron_test' crons: - { name: 'Send email', command: 'app:test', env: { staging: '* * * * *', prod: '* 5 * * *' } }
Command
Pour générer le fichier il faudra exécuter la commande :
bin/console lexik:cron:generate-file --env-mode=prod // --dry-run pour visualiser le résultat sans générer le fichier
Exemple de retour de commande :
Generate cron file ================== [OK] File generated ! [NOTE] path : /my-project/var/cache/cron_test
Exemple de fichier généré :
# Send email * 5 * * * project_prod php7.3 path/to/prod/bin/console app:test --env=prod
Bonus
Si vous avez un outil de CI il vous sera simple de générer le fichier lors de vos déploiements automatique et être sûr que vos crons seront bien déclarées.