10quality/scheduler

PHP 任务调度器。(Cronjob 任务调度器)

v1.0.4 2019-11-16 19:18 UTC

This package is auto-updated.

Last update: 2024-09-17 05:44:06 UTC


README

Latest Stable Version Total Downloads License

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