> 传统方式是使用Linux的crontab来实现,但并不是所有开发人员都拥有服务器权限去设置定时任务,这里 hyperf/crontab 组件为您提供了一个 秒级 定时任务功能,简单定义即可实现定时任务。
[TOC]
## 安装
~~~
composer require hyperf/crontab
~~~
## 启动任务调度器进程
> 1. 配置 /config/autoload/processes.php
~~~
return [
Hyperf\Crontab\Process\CrontabDispatcherProcess::class,
];
~~~
> 2. 配置 /config/autoload/crontab.php
~~~
return [
// 是否开启定时任务
'enable' => true,
];
~~~
## 定义定时任务 (注解方式)
> rule属性:
> * 定时任务的执行规则,在分钟级的定义时,与 Linux 的 crontab 命令的规则一致
> * 在秒级的定义时,规则长度从 5 位变成 6 位,在规则的前面增加了对应秒级的节点,也就是 5 位时以分钟级规则执行,6 位时以秒级规则执行,如 ``*/5 * * * * *`` 则代表每 5 秒执行一次。注意在注解定义时,规则存在 \ 符号时,需要进行转义处理,即填写 `*\/5 * * * * *`。
~~~
namespace App\Task;
use Hyperf\Contract\StdoutLoggerInterface;
use Hyperf\Crontab\Annotation\Crontab;
use Hyperf\Di\Annotation\Inject;
/**
* @Crontab(name="Foo_随便定义", rule="* * * * *", callback="execute", memo="这是一个示例的定时任务")
*/
class FooTask
{
/**
* @Inject()
* @var \Hyperf\Contract\StdoutLoggerInterface
*/
private $logger;
public function execute()
{
$this->logger->info(date('Y-m-d H:i:s', time()));
}
}
~~~