命令行文件
定时任务命令文件存放在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()