Не устанавливается время выполнения скрипта в yii2-queue
Использую yii2 и модуль queue. Закидываю в очередь команду, в консоли пишу yii queue/listen. Работа скрипта каждый раз падает через 5 минут с сообщением:
[-][-][-][error][yii\queue\Queue] [2890] <путь до job-а> (attempt: 1, PID: 9345) is finished with error: Symfony\Component\Process\Exception\ProcessTimedOutException: The process "'yii' 'queue/exec' '2890' '300' '1' '9345' '--color='" exceeded the timeout of 300 seconds.
Поставил в код job-а в самое начало функции execute это:
set_time_limit(1800);
ini_set('MAX_EXECUTION_TIME', '-1');
не работает. видимо от того что процесс запускается в консоли, а в консоли такое не работает.
Меняю параметр ttr в конфиге queue:
'queue' => [
'class' => \yii\queue\db\Queue::class,
'db' => 'db', // компонент подключения к БД
'tableName' => 'queue', // Имя таблицы
'channel' => 'default', // Queue channel key
'mutex' => \yii\mutex\MysqlMutex::class, // Mutex used to sync queries
'ttr' => 60 * 60,
'as log' => \yii\queue\LogBehavior::class,
'on afterError' => function($event) {}
],
то есть ttr - 60*60 - 1 час. Но в ошибке сказано про 300 секунд. Откуда берётся эти 300 секунд и как их поменять?
Предвижу вопрос "а какое значение в php.ini?" - ответ: в php.ini значение max_execution_time вообще равен 30!
Ответы (3 шт):
Решил проблему добавлением в конфиг события:
'on beforePush' => function($event) {$event->ttr = 60 * 60;}
теперь подставляется нужный ttr и не падает через 5 минут. не совсем понятно зачем там тогда нужен параметр ttr если перед добавлением job-а в работу подставляется дефолтный ttr - 300
Посмотрите где какой конфиг у Вас стоит, т.к. время выполнения очереди записывается у вас скорее всего в в конфиге web.php т.е. там нужно ставить ttr 60 * 60, именно это значение попадает в конфиг очереди и бд, и потом уде берется из бд и передается косольному скрипту на выполнение.
Конфиг надо править не web.php а console.php. параметр ttr в конфиге queue должен быть установлен в правильном конфиг-файле