开启定时任务,需要修改根目录下的 .env 中的CRONABLE=true
示例
创建 swoft/app/Tasks/DemoTask.php
<?php
namespace App\Tasks;
use Swoft\Task\Bean\Annotation\Task;
use Swoft\Task\Bean\Annotation\Scheduled;
/**
* Demo task
*
* @Task("demo")
*/
class DemoTask
{
/**
* crontab定时任务
* 每一秒执行一次
*
* @Scheduled(cron="* * * * * *")
*/
public function timing()
{
echo "每一秒执行一次" . PHP_EOL;
}
}
@Scheduled
:设置触发时间
只要你开启了 CRONABLE
,然后把代码写出来,只要一运行swoft就会自动运行,无需进行调用。也就是说,到了时间就会运行。
cron
格式
0 1 2 3 4 5
* * * * * *
- - - - - -
| | | | | |
| | | | | +----- 星期几 (0 - 6) (星期日=0)
| | | | +----- 月 (1 - 12)
| | | +------- 日 (1 - 31)
| | +--------- 时 (0 - 23)
| +----------- 分 (0 - 59)
+------------- 秒 (0-59)
为方便测试,把swoft/app/Tasks/SyncTask.php
里的最后俩个方法注释掉,删掉也随便你,只是一个demo,不会影响swoft。
每分钟的第10秒触发
@Scheduled(cron="10 * * * * *")
每小时50分钟10秒时触发
@Scheduled(cron="10 50 * * * *")
每天21时01分钟10秒时触发
@Scheduled(cron="10 1 21 * * *")
以此类推。
如果遇到设置了没效果,那就是在当前分钟设置了是无效的,你得设置下一分钟的。