Laravel 作业无法完成 foreach 迭代

问题描述 投票:0回答:1

我有一个调度程序,它运行一个作业来处理 400 个对象的数组,并且我使用 foreach 循环来迭代该数组并对每个对象执行计算。然而我注意到迭代从未完成。 当它达到第 100 - 110 次迭代之间的某个位置时,不会继续进行下一次迭代,而是重复该作业,并从数组的索引 0 开始迭代。

我在本地机器上尝试了这个,它运行良好,它成功地迭代了整个数组并执行了所有代码,但在 ubuntu 服务器上从来没有运行过。

public function handle()
{
    try {
        foreach ($objects as $object) {
            //do something
            //compare something

            $someGroups = $object->certainProperty;

            foreach ($somegroups as $group) {
                //do some calculation and comparison
            }

            $members = $object->certainMembersArray;

            //insert members to DB
        }
    } catch (\Exception $e) {
        //log exception
    }
}

有趣的是,它永远不会进入 catch 块并记录任何错误或异常,这使得调试变得困难。起初我怀疑是内存问题,所以我增加了内存,但没有任何区别。

有人可以建议我可以做什么来进一步调查这个问题吗?

更新:

  1. 时间表每天仅运行一次
php laravel jobs
1个回答
0
投票

您的作业在服务器上似乎超时。尝试更改队列或作业本身的超时值。本地机器通常比小型实例/Droplet 更快。

您可以在启动队列时设置超时值,如下所示,

默认超时时间为:60 秒

$ php artisan queue:work --timeout=120

或者您可以在作业中添加超时,

<?php
 
namespace App\Jobs;
 
class ProcessObjectsJob implements ShouldQueue
{
    /**
     * The number of seconds the job can run before timing out.
     *
     * @var int
     */
    public $timeout = 120;
}
© www.soinside.com 2019 - 2024. All rights reserved.