简单的cron作业管理器

v3.2.3 2019-04-18 15:39 UTC

This package is not auto-updated.

Last update: 2024-09-19 00:11:09 UTC


README

极简cron作业管理器。注册作业,作业管理器将根据其间隔自动执行它们。

注意:这不是一个队列管理器,因此这与Laravel的队列组件无关。另外,请注意,Laravel 5有一个集成的任务调度器,它与此库类似。

安装

此库需要PHP >= 7.0

chriskonnertz/jobs 添加到 composer.json

"chriskonnertz/jobs": "3.*"

或通过控制台

composer require chriskonnertz/jobs

将来运行 composer update 以更新到此库的最新版本。

框架支持

此库支持Laravel >=5.5,并提供服务提供者。将服务提供者添加到配置文件 config/app.php

    'providers' => array(
        // ...
        'ChrisKonnertz\Jobs\Integration\JobsServiceProvider',
    ),

要为外观创建别名,在此文件中添加此新条目

    'aliases' => array(
        // ...
        'Jobs' => 'ChrisKonnertz\Jobs\Integration\JobsFacade',
        'AbstractJob' => 'ChrisKonnertz\Jobs\AbstractJob',
    ),

介绍

创建一个具体的作业类

    class ExampleJob extends ChrisKonnertz\Jobs\AbstractJob 
    {

        protected $name = 'exampleJob';

        protected $interval = 5; // Run every five minutes

        public function run(int $executedAt = null)
        {
            echo 'Hello World!';
        }

    }

实例化作业管理器

    $cache = new ExampleCacheClass;
    $jobs = new ChrisKonnertz\Jobs\Jobs($cache);

如果您使用Laravel与服务提供者,您无需担心此问题。服务提供者将注入缓存依赖项。在其他任何情况下,缓存类都必须实现缓存接口(CacheInterface)。请参阅 LaravelCache 类(旨在用于Laravel集成)的示例实现。

注册作业

    $jobs->addLazy('updateStreams', 'ExampleJob');

执行已注册的作业

    $jobs->run();

自动执行作业

如果您的应用程序建立在Laravel之上,您将有权访问一个Artisan命令:php artisan jobs。此命令将调用Jobs::run()以执行作业。因此,您可以将cron作业添加到crontab以启动此命令,例如1 * * * * php /var/www/laravel/artisan jobs。这将每分钟执行一次Artisan命令。我们建议每分钟运行一次cron作业。

作业管理器的方法

注意:这些方法中的一些可能会抛出JobException

确定作业池中是否存在作业

    $hasJob = $jobs->has('exampleJob');

将作业添加到池中(不带懒加载)

    $job = new ExampleJob;
    $jobs->add($job);

将作业添加到池中(带懒加载)

    // Pass the class name:
    $jobs->addLazy(\My\Example\Job::class);

    // Or pass a closure:
    $jobs->addLazy(function()
    {
        return new ExampleJob;
    });

我们建议使用addLazy()而不是add()

从池中删除作业

    $jobs->remove('exampleJob');

从池中删除所有作业

    $jobs->clear();

计数作业

    $howMany = $jobs->count();

获取剩余的冷却时间

$minutes = $jobs->remainingCoolDown();

获取最后一次迭代的时间戳

$timestamp =  $jobs->lastRunAt();

为所有作业设置最小冷却时间

    $jobs->coolDown(1); // One minute

最小值和初始值为一分钟。很可能永远不需要更改此值。

设置缓存键命名空间

    $jobs->cacheKey('jobs.');

作业类

作业类实现了作业接口。因此,它必须实现这些方法

    interface JobInterface 
    {

        public function getName() : string; // The name (identifier) of the job

        public function getActive() : bool; // Active or paused (=not executed)?

        public function getInterval() : int; // The cool down time

        public function run(int $executedAt = null); // The run method

    }

AbstractJob 类实际上实现了这些方法,因此我们建议让您的具体作业类从此类继承。抽象类提供了 nameactiveinterval 属性,继承类可以重写这些属性。

间隔

默认情况下(只要继承的工作类没有重写它),getInterval()interval属性的简单获取器。interval属性定义了工作冷却时间,单位为分钟。例如,如果它是60分钟(= 1小时),则工作每小时执行一次(最大)。

状态

此存储库的状态:已弃用。将修复问题,但不会实现新功能。