10quality / scheduler
PHP 任务调度器。(Cronjob 任务调度器)
Requires
- amostajo/php-json-array: ^1.0
Requires (Dev)
- phpunit/phpunit: 4.4.*
This package is auto-updated.
Last update: 2024-09-17 05:44:06 UTC
README
PHP 任务调度器。(Cronjob 任务调度器)
安装
通过 composer
composer require 10quality/scheduler
用法
调度器
创建一个将被 cronjob 调用的 PHP 文件,示例,并包含以下代码行
// 1) LOAD COMPOSER AUTOLOAD OR BOOTSTRAP FIRST // 2) use Scheduler\Scheduler;
使用所需的配置初始化调度器
Scheduler::ready([ 'jobs' => ['path' => __DIR__.'/jobs'], 'session' => ['driver' => 'file', 'path'=>__DIR__.'/.tmp'], ]);
注意:调度器需要一个定义好的工作路径(工作所在的位置)和用于处理间隔的会话驱动程序/设置(该软件包目前只支持文件)。
注册您的工作和执行间隔。
Scheduler::ready([...]) ->job('MyJob', function($task) { return $task->daily(); });
启动调度器
Scheduler::ready([...]) ->job(...) ->start();
然后设置 cronjob 任务来运行调度器,如下所示
* * * * * php /path/to/scheduler-file.php >> /dev/null 2>&1
工作
调度器运行 PHP 编写的任务。一个任务是从 Scheduler\Base\Job
类扩展的 PHP 类。一旦任务在调度器中注册,它将在运行时调用 execute()
函数,示例。
创建一个类似于以下示例的任务
use Scheduler\Base\Job; class MyJob extends Job { public function execute() { // My code here... } }
对于上面的示例,任务文件必须命名为 MyJob.php
并存储在工作路径中。
间隔
在注册任务时定义执行间隔
Scheduler::ready([...]) ->job('MyJob', function($task) { // Here we define the task interval return $task->daily(); });
可用间隔
// On every execution $task->now(); // Daily $task->daily(); // Weekly $task->weekly(); // Monthly $task->monthly(); // Every minute $task->everyMinute(); // Every 5 minutes $task->everyFiveMinutes(); // Every 10 minutes $task->everyTenMinutes(); // Every 30 minutes $task->everyHalfHour(); // Every hour $task->everyHour(); // Every 12 hours $task->everyTwelveHours(); // Every 2 days $task->everyTwoDays(); // Every 3 days $task->everyThreeDays(); // Every XXX minutes (custom minutes) // @param init $minutes Custome minutes interval $task->custom($minutes);
事件
您可以在配置调度器时定义可调用的事件处理器,如下例所示
Scheduler::ready([ 'jobs' => ['path' => __DIR__.'/jobs'], 'session' => ['driver' => 'file', 'path'=>__DIR__.'/.tmp'], 'events' => [ 'on_start' => function($microtime) { // Do something during event }, 'on_job_start' => function($jobName, $microtime) { if ($jobName === 'Job') // Do something during event } ], ]);
事件列表(可选使用参数)
异常处理
调度器将持续运行而不会中断。您可以根据每个任务单独处理异常或全局处理以记录所需的内容。
全局异常处理
在调度器的事件配置中添加一个 on_exception
可调用处理器,如下例所示
Scheduler::ready([ 'jobs' => ['path' => __DIR__.'/jobs'], 'session' => ['driver' => 'file', 'path'=>__DIR__.'/.tmp'], 'events' => [ 'on_exception' => function($e) { // Do anything with exception echo $e->getMessage(); } ], ]);
任务异常
在定义任务任务时添加异常处理可调用,如下所示
Scheduler::ready([...]) ->job('MyJob', function($task) { // Here we define the task interval return $task->daily() ->onException(function($e) { // Do anything with exception echo $e->getMessage(); }); });
当异常发生时重置任务并强制在下一次运行时执行,在任务中指定它
Scheduler::ready([...]) ->job('MyJob', function($task) { // Here we define the task interval return $task->daily() ->canReset() ->onException(function(Exception $e) { // Do anything with exception }); });
会话
文件
指定会话文件存储的文件夹。确保该文件夹具有正确的权限。
Scheduler::ready([ 'jobs' => ['path' => __DIR__.'/jobs'], 'session' => ['driver' => 'file', 'path'=>__DIR__.'/.tmp'], ]);
可调用
您可以通过从 Session 接口扩展来创建自己的会话驱动程序。
use Scheduler\Contracts\Session; class MySessionDriver implements Session { /* * See and develop required interface methods.... */ }
然后,在初始化调度器时,将驱动程序设置为 callable
并将 callable 作为第二个参数添加,如下例所示
Scheduler::ready([ 'jobs' => ['path' => __DIR__.'/jobs'], 'session' => [ 'driver' => 'callable',, 'callable' => function() use(&$session) { return MySessionDriver::load( $custom_options ); } ], ]);
要求
- PHP >= 5.4
编码指南
PSR-4。
许可协议
MIT 许可协议(MIT)
版权所有 (c) 2016-2019 10Quality。