命令行文件

定时任务命令文件存放在crmeb\command\Timer.php

进程数设置

protected function execute(Input $input, Output $output)
 {
        $this->init($input, $output);
        Worker::$pidFile = app()->getRootPath().'runtime/timer.pid';
        $task = new Worker();
        //设置进程数
        $task->count = 1;
        //执行每隔6秒执行一次的事件
        event('Task_6');
        $task->onWorkerStart = [$this, 'start'];
        $task->runAll();
}

定时器pid文件存放

存放在根目录下的runtime/timer.pid

 Worker::$pidFile = app()->getRootPath().'runtime/timer.pid';

启动命令

由一个定时器每过2秒执行一次,循环内执行订阅事件

public function start()
{
    $last = time();
    $task = [6 => $last, 10 => $last, 30 => $last, 60 => $last, 180 => $last, 300 => $last];
    $this->timer = \Workerman\Lib\Timer::add($this->interval, function () use (&$task) {
        try {
            $now = time();
            event('Task_2');
            foreach ($task as $sec => $time) {
                if ($now - $time >= $sec) {
                    event('Task_' . $sec);
                    $task[$sec] = $now;
                }
            }
        } catch (\Throwable $e) {
        }
    });
}

停止定时任务

public function stop()
 {
        \Workerman\Lib\Timer::del($this->timer);
 }

定时任务事件执行存放文件

\app\subscribes\TaskSubscribe.php

内部事件

public function handle() 方法会实例化时执行一次

event('Task_2') 每过2秒执行一次,对应方法onTask_2()

event('Task_6') 每过6秒执行一次,对应方法onTask_6()

event('Task_10') 每过10秒执行一次,对应方法onTask_10()

event('Task_30')每过30秒执行一次,对应方法onTask_30()

event('Task_60') 每过60秒执行一次,对应方法onTask_60()

event('Task_180')每过180秒执行一次,对应方法onTask_180()

event('Task_300')每过300秒执行一次,对应方法onTask_300()