> 傳統方式是使用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()));
}
}
~~~