Crontab 定时任务
EasySwoole支持用户根据Crontab规则去添加定时器。时间最小粒度是1分钟。
实现原理
在主进程中,注册好各个任务规则和回调,服务启动后,在自定义进程内,通过定时器检测有没有待执行任务,若有则投递给异步进程异步执行。 解析规则可以参考https://github.com/dragonmantank/cron-expression 实现。
---------------以上引用官方文档------------------
实现每天凌晨2点 删除超过30天的API请求记录
创建一个计划任务文件App\Crontab\DeleteApiTracker.php
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2020/1/14 * Time: 19:09 */ namespace App\Crontab; use App\Model\TrackerPoint\TrackerPointModel; use EasySwoole\EasySwoole\Crontab\AbstractCronTask; /** * Class StoreBillCreate * 每天凌晨2点 删除超过30天的API请求记录 * @package App\Crontab */ class DeleteApiTracker extends AbstractCronTask { public static function getRule(): string { return '00 02 * * *'; } public static function getTaskName(): string { return 'DeleteApiTracker'; } function run(int $taskId, int $workerIndex) { $time = time()-60*60*24*30; TrackerPointModel::create()->where('startTime<'.$time)->destroy(); $date = date('Y-m-d H:i:s',time()); echo "---------{$date} 删除超过30天API请求记录---------".PHP_EOL; } function onException(\Throwable $throwable, int $taskId, int $workerIndex) { echo $throwable->getMessage(); } }
方法说明:
getRule() 定时周期 计划任务规则 和linux下的Crontab规则相同
getTaskName() 计划任务名称,名称重复会导致计划任务失效
run() 任务执行内容
onException() 任务异常捕获
添加计划任务
EasySwooleEvent.php中
use EasySwoole\EasySwoole\Crontab\Crontab;
use App\Crontab\DeleteApiTracker;
public static function mainServerCreate(EventRegister $register) {
// TODO: Implement mainServerCreate() method.
/** * **************** Crontab任务计划 ********************** */
Crontab::getInstance()->addTask(DeleteApiTracker::class); // 开始一个定时任务计划
}
执行结果
本文为够意思原创文章,转载无需和我联系,但请注明来自够意思博客blog.go1s.cn:够意思博客 » EasySwoole 基础使用之Crontab 计划任务