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 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 * * *', '/usr/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 release_path
and stage
in the cronjob config file.
- Build the Docker image:
docker build -t setono/deployer-cron --no-cache ./tests/docker
- Run the Docker container:
docker run -d -p 2222:22 setono/deployer-cron
- Run the tests:
vendor/bin/phpunit