# 定时任务新版

旧版在使用上有一些困难,很多人不熟悉多进程管理这块,在这块业务上耦合也比较严重,所以有问题,难于调试。新版本在使用上变得更加简单,只需要定义 Command 即可。也不需要之前定义 Task 之类的单独类了。

第一变得就是在后台添加定时执行的 command 指令,如下:


declare (strict_types=1);

namespace catchAdmin\monitor\command;

class TestCommand extends Command
{
    protected $pid;

    protected function configure()
    {
        // 指令配置
        $this->setName('testTow')
            ->setDescription('test command');
    }

    protected function execute(Input $input, Output $output)
    {}
}

whcbXd.jpg (opens new window) 首先按照上图开启你的系统监控模块

在后台添加 command 指令即可,目前 command 支持在 catch 目录下的模块中 command 文件夹下自动载入

srXd10.png (opens new window)

# 调度

设置每分钟调度一次,注意这里必须是每分钟

* * * * * cd /path-to-your-project && php think catch:schedule >> /dev/null 2>&1

# 自动载入 commands

在 CatchAdmin 中,command 都是支持自动载入的,只需要这这样实现就可以了. 继承 catcher\ModuleService, 实现 loadCommands 返回 NAMESPACE 和 存放 commands 的文件目录即可.

namespace app\admin;

use catcher\ModuleService;

class AppService extends ModuleService
{


    public function loadRouteFrom()
    {
        // TODO: Implement loadRouteFrom() method.

    }

    public function loadCommands()
    {
        return [__NAMESPACE__, __DIR__ . DIRECTORY_SEPARATOR . 'command'];
    }

}

# cron 的表达式

// cron 表达式
 *    *    *    *    *
 -    -    -    -    -
 |    |    |    |    |
 |    |    |    |    |
 |    |    |    |    +----- day of week (0 - 6) (Sunday=0)
 |    |    |    +---------- month (1 - 12)
 |    |    +--------------- day of month (1 - 31)
 |    +-------------------- hour (0 - 23)
 +------------------------- min (0 - 59)