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 the default Deployer lifecycle:
<?php
// deploy.php
require_once 'recipe/cron.php';
The following Deployer parameters are defined:
Parameter | Description | Default value |
---|---|---|
cron_config_dir | The directory to search for cronjob config files | etc/cronjobs |
cron_delimiter | The marker in the crontab file that delimits the generated cronjobs from manually added cronjobs | The stage. If not set, the default is prod . |
cron_user | The user onto which the crontab should be added (default is remote_user ) |
get('http_user') if you are root, else '' |
The cron builder context is set to the Deployer configuration parameters. This means you can use variables in your cronjob config files. For example:
<?php
# etc/cronjobs/jobs.php
declare(strict_types=1);
use Setono\CronBuilder\Context;
use Setono\CronBuilder\CronJob;
return static function (Context $context): iterable {
yield new CronJob('0 0 * * *', '{{ context("bin/php") }} {{ release_path }}/send-report.php', 'Run every day at midnight');
if ($context->get('stage') === 'prod') {
yield new CronJob('0 0 * * *', '/usr/bin/php {{ release_path }}/process.php');
}
};
Notice the usage of bin/php
, release_path
and stage
in the cronjob config file. This is possible because the Deployer
configuration is added as context on the cron builder. When the Deployer context key contains a character that would
otherwise be interpreted by Twig (e.g. /
) you can use the context
Twig function to get the value.