够意思博客够意思博客够意思博客

EasySwoole 基础使用之Crontab 计划任务

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);         // 开始一个定时任务计划     
   }

执行结果

EasySwoole 基础使用之Crontab 计划任务(图1)

本文为够意思原创文章,转载无需和我联系,但请注明来自够意思博客blog.go1s.cn:够意思博客 » EasySwoole 基础使用之Crontab 计划任务

加载中~