короч как сделал .
поставил плагин для yii "composer require --prefer-dist yiisoft/yii2-queue"
в common/config/main добавил
'components' => [
'queue' => [
'class' => \yii\queue\file\Queue::class,
'path' => '@console/runtime/queue',
'as log' => \yii\queue\LogBehavior::class,
],
'bootstrap' => [
'queue',
],
создал класс отвечающий за таски
<?php
class QueueHelper
{
public static function setTask ($task) {
Yii::$app->queue->push($task);
}
public static function setDelayTask ($task , $delay = 5) { // delay - задержка выполнения в сек
Yii::$app->queue->delay($delay)->push($task);
}
}
и класс с самой таской
class TaskEndEvent extends BaseObject implements \yii\queue\JobInterface
{
public $idTask;
public function execute($queue)
{
$e = Events::findOne($this->idTask);
if ($e->status != 1 ){
$e->ended_at = $e->creation_at + 7200 ;
$e->status = 1 ;
$e->save(false);
}
}
}
и сделал вызов при сохранении
public function afterSave($insert, $changedAttributes)
{
parent::afterSave($insert, $changedAttributes);
if ($this->status != 1){
QueueHelper::setDelayTask(new TaskEndEvent(['idTask'=>$this->id]), 7200);
}
}
и кроном запустил проверку на наличие актуальных таск
cron run * * * * * /usr/bin/php /var/www/my_project/yii queue/run
можно повесить слушатель таск в консоли
yii queue/listen