我正在使用 yii2 和队列模块。我将命令放入队列中,在我编写的控制台中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.
我把它放在函数最开始的工作代码中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!
看看你有什么配置,因为。队列执行时间很可能记录在您的 web.php 配置中,即 在那里你需要设置 ttr 60 * 60,这个值进入队列和数据库配置,然后从数据库中取出并传递给脚本执行。
配置应该不是 web.php 而是 console.php 编辑。队列配置中的 ttr 参数必须在正确的配置文件中设置
我通过在配置中添加一个事件解决了这个问题:
现在所需的一个被替换
ttr并且在 5 分钟后不会下降。ttr如果在添加作业之前将默认参数替换为作业ttr- 300 ,则不完全清楚为什么需要该参数