setono / cron-builder
从配置目录生成 crontab
v1.0.0-alpha
2024-09-17 12:18 UTC
Requires
- php: >=8.1
- dragonmantank/cron-expression: ^3.0
- twig/twig: ^2.0 || ^3.0
Requires (Dev)
- infection/infection: ^0.27.11
- phpunit/phpunit: ^9.6
- psalm/plugin-phpunit: ^0.19.0
- setono/code-quality-pack: ^2.8.2
- symfony/finder: ^6.4 || ^7.0
README
从您的仓库中的配置文件构建 crontab。配置文件用 PHP 编写,可以放在仓库的任何位置。
安装
composer require setono/cron-builder
使用方法
以下两个代码片段概述了 cron builder 的最简单用法。
1. 添加您的命令
<?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 {{ args|join(" ") }}', 'Run every day at midnight'); if ($context->get('env') === 'prod') { yield new CronJob('0 0 * * *', '/usr/bin/php {{ release_path }}/process.php {{ args|join(" ") }}'); } };
注意 {{ release_path }}
和 {{ args|join(" ") }}
占位符。这些是将在上下文字典中替换的占位符。这是通过使用 Twig 模板引擎完成的,这意味着您可以在 cronjob 定义中使用 Twig 的所有功能。
2. 构建 crontab
当您的 cronjob 已定义时,您可以输出 crontab 文件
<?php use Setono\CronBuilder\CronBuilder; use Symfony\Component\Finder\Finder; echo (new CronBuilder()) ->addFiles( (new Finder()) ->files() ->in(__DIR__ . '/etc/cronjobs') ->name('*.php') ) ->addContext('release_path', '/home/johndoe/public_html') ->addContext('env', 'prod') ->addContext('args', ['--verbose']) ->build() ;
这将输出以下内容
###> Automatically generated by Setono Cron Builder - DO NOT EDIT ###
0 0 * * * /usr/bin/php /home/johndoe/public_html/send-report.php --verbose # Run every day at midnight
0 0 * * * /usr/bin/php /home/johndoe/public_html/process.php --verbose
###< Automatically generated by Setono Cron Builder - DO NOT EDIT ###
您可以将此保存为名为 crontab.txt
的文件,并像这样添加到您的 crontab 中
cat crontab.txt | crontab -