跳到主要内容
版本:2.6.1

定时任务

旧版在使用上有一些困难,很多人不熟悉多进程管理这块,在这块业务上耦合也比较严重,所以有问题,难于调试。新版本在使用上变得更加简单,只需要定义 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 首先按照上图开启你的系统监控模块

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

whg0ud.jpg

调度

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

* * * * * 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)

调用的任务类设置 TestTask 就完成了。感兴趣的话,就赶快试一试吧。

常用Crontab表达式示例

  • */5 * * * * 每5分钟执行一次
  • 30 21 * * * 每晚21:30执行一次
  • * 12-23 * * * 下午每分钟执行一次
  • 0 */2 * * * 每2小时执行一次
  • * */2 * * * 偶数小时每分钟执行一次
  • 0 * * * * 每小时执行一次
  • 0 0 * * * 每天执行一次
  • 0 0 0 * * 每月执行一次
  • 0 0 0 0 1 每个星期一执行一次

cron表达式详细说明 https://zh.wikipedia.org/wiki/Cron#例子