DionTech/laravel-extended-scheduler

本扩展包允许您通过(数据库)模型配置应用的任务调度。它被开发出来是为了避免仅通过配置文件处理这些配置,因为在每个服务器需要运行不同任务时,我们无法将相同的代码库共享到多个服务器实例。

v1.3.0 2022-02-25 13:21 UTC

README

Latest Version run-tests GitHub last commit GitHub issues Packagist Downloads License Twitter Follow

扩展 Laravel 调度器,支持通过模型配置任务

此扩展包允许您通过(数据库)模型配置应用的任务调度。它被开发出来是为了避免仅通过配置文件处理这些配置,因为在每个服务器需要运行不同任务时,我们无法将相同的代码库共享到多个服务器实例。

此扩展包将扩展 Laravel 调度器,因此所有已编写的计划任务仍然可用。

版本 / Laravel 支持

  • laravel 8: v1.2.x
  • laravel 9: v1.3.x

安装

composer require diontech/laravel-extended-scheduler
php artisan migrate

使用

基于 Facade 的处理

除了下面提到的基于模型的处理方式,您还可以进行基于 Facade 的处理,如下所示:

\DionTech\Scheduler\Support\Facades\ScheduledCommand\ScheduledCommand::arguments([
    'foo'
])->fluent([
    'cron' => [
        '* * * * *'
    ]
])->isActive()
->create();

基于模型的处理

目前您可以进行如下类似的操作

        \DionTech\Scheduler\Models\ScheduledCommand::create([
            'method' => 'command',
            'arguments' => [
                'schedule:list'
            ],
            'fluent' => [
                'cron' => ['* * * * *']
            ],
            'is_active' => true
        ]);

        \DionTech\Scheduler\Models\ScheduledCommand::create([
            'method' => 'command',
            'arguments' => [
                'foo'
            ],
            'fluent' => [
                'weekdays',
                'hourly',
                'timezone' => ['America/Chicago'],
                'between' => ['8:00', '17:00']
            ],
            'is_active' => true
        ]);
        
        \DionTech\Scheduler\Models\ScheduledCommand::create([
            'method' => 'command',
            'arguments' => [
                'test:command',
                ['Taylor', '--force']
            ],
            'fluent' => [
                'daily'
            ],
            'is_active' => true
        ]);

        \DionTech\Scheduler\Models\ScheduledCommand::create([
            'method' => 'job',
            'arguments' => [
                'new \App\Jobs\TestJob', 'sqs'
            ],
            'fluent' => [
                'everyFiveMinutes'
            ],
            'is_active' => true
        ]);

查看https://laravel.net.cn/docs/8.x/scheduling了解其使用方法。

将插入的模型规范化为可读结构

        $model = \DionTech\Scheduler\Models\ScheduledCommand::create([
            'method' => 'command',
            'arguments' => [
                'foo'
            ],
            'fluent' => [
                'weekdays',
                'hourly',
                'timezone' => ['America/Chicago'],
                'between' => ['8:00', '17:00']
            ],
            'is_active' => true
        ]);
       
    $event = $model->event(); //returns \Illuminate\Console\Scheduling\Event
    $command = $event->command; //something like "/usr/local/Cellar/php@7.4/7.4.16/bin/php' 'artisan' foo"
    $expression = $event->expression; //something like "0 * * * 1-5"
    $description = $event->description; //something like "new \App\Jobs\TestJob"

使命令激活/非激活

每个计划命令都可以通过其属性 'is_active' 设置为非激活/激活。默认值为 false,因此您必须显式激活命令,以便 Laravel 调度器能够识别。

向命令添加描述/通知

每个计划命令都有一个 'description' 属性,您可以在其中保存所需的附加通知。

获取应用程序中注册的/可用的所有命令

基于模型

$commands = (new \DionTech\Scheduler\Support\Helper\CommandLister)->all();

基于请求/响应

将此内容插入您的控制器,即可完成

return (new \DionTech\Scheduler\Http\Responses\ListAllCommandsResponse())
    ->toResponse($request);

下一步

  • 编写 API 类
  • 使 getCommands() 方法可缓存
  • 构建一些配置