DionTech/ laravel-extended-scheduler
本扩展包允许您通过(数据库)模型配置应用的任务调度。它被开发出来是为了避免仅通过配置文件处理这些配置,因为在每个服务器需要运行不同任务时,我们无法将相同的代码库共享到多个服务器实例。
v1.3.0
2022-02-25 13:21 UTC
Requires
- php: ^8.0.2
- laravel/framework: ^9.0
Requires (Dev)
- mockery/mockery: ^1.4
- orchestra/testbench: ^v7.1.0
- phpunit/phpunit: ^9.5.10
This package is auto-updated.
Last update: 2024-09-24 13:31:06 UTC
README
扩展 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() 方法可缓存
- 构建一些配置