chriskonnertz / jobs
简单的cron作业管理器
Requires
- php: >=7.0
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
类实际上实现了这些方法,因此我们建议让您的具体作业类从此类继承。抽象类提供了 name
、active
和 interval
属性,继承类可以重写这些属性。
间隔
默认情况下(只要继承的工作类没有重写它),getInterval()
是interval
属性的简单获取器。interval
属性定义了工作冷却时间,单位为分钟。例如,如果它是60
分钟(= 1
小时),则工作每小时执行一次(最大)。
状态
此存储库的状态:已弃用。将修复问题,但不会实现新功能。