Use the Setono cron builder to generate cron files in your deployment process
Simple handling of cronjobs in your deployment process using the Cron builder library.
$ composer require setono/deployer-cron
The easiest usage is to include the cron recipe which hooks into default Deployer events:
<?php // deploy.php require_once 'recipe/cron.php';
The following Deployer parameters are defined:
|cron_source_dir||The directory to search for cronjob config files||
|cron_delimiter||The marker in the crontab file that delimits the generated cronjobs from manually added cronjobs||
|cron_variable_resolvers||An array of variable resolvers to add to the cron builder||
|cron_context||The context to give as argument to the
|cron_user||The user onto which the crontab should be added||
|cron_dry_run||If true, this recipe will not apply the generated crontab||
NOTICE that the default value of
cron_variable_resolvers is an empty array, but this lib will always add a
ReplacingVariableResolver with the variables described in the section below.
The default build context is defined in the Deployer parameter
cron_context. It adds the stage as context which means
you can use the
condition key in your cronjob config:
# /etc/cronjobs/jobs.yaml - schedule: "0 0 * * *" command: "%php_bin% %release_path%/bin/console my:dev:command" condition: "context.stage === 'dev'"
The above cronjob will only be added to the final cron file if the deployment stage equals
This library also adds more variables you can use in your cronjob configs:
%application%: Will output the application name
%stage%: Will output the stage, i.e.
%php_bin%: Will output the path to the PHP binary
%release_path%: Will output the release path on the server
With these variables you can define a cronjob like:
# /etc/cronjobs/jobs.yaml - schedule: "0 0 * * *" command: "%php_bin% %release_path%/bin/console my:command"
And that will translate into the following line in your crontab:
0 0 * * * /usr/bin/php /var/www/your_application/releases/23/bin/console my:command