setono/cron-builder

从配置目录生成 crontab

v1.0.0-alpha 2024-09-17 12:18 UTC

This package is auto-updated.

Last update: 2024-09-17 12:20:51 UTC


README

Latest Version Software License Build Status Coverage Status Mutation testing

从您的仓库中的配置文件构建 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 -