【问题标题】:Laravel 4 - retry all failed jobsLaravel 4 - 重试所有失败的作业
【发布时间】:2015-08-27 00:55:20
【问题描述】:

在 laravel 4.2 文档中,如果我想从失败的作业表中重试失败的作业,我应该这样做:

php artisan queue:retry 5

其中 5 是作业 ID。

如何一次重试所有失败的作业?

【问题讨论】:

    标签: php laravel queue


    【解决方案1】:

    您可以通过运行以下命令重试所有失败的作业:php artisan queue:retry all

    这里是官方文档:https://laravel.com/docs/7.x/queues#retrying-failed-jobs

    【讨论】:

    • 这个问题是针对 Laravel 4 的,但是是的。从 Laravel 5 开始,这是正确的答案。
    【解决方案2】:

    Laravel docs 说:

    要重试所有失败的作业,请使用 queue:retry 并将 all 作为 ID:

    php工匠队列:重试所有

    但是这对我不起作用。我得到“没有失败的工作与给定的 ID 匹配。”。 我所做的是我运行了一个允许我执行 php 的命令:

    php artisan tinker
    

    并写了这个:

    for ($i = 100; $i <= 150; $i ++) Artisan::call('queue:retry', ['id' => $i]);
    

    这里 100 和 150 是您失败的作业 ID 范围。我曾经动态地从数据库中检索它们,但如果您使用另一个队列驱动程序,那将无法正常工作。

    它的作用是遍历您指定范围内的 ID,并为每个 ID 调用“php artisan queue:retry XXX”命令。

    【讨论】:

    • php artisan queue:retry all 将再次推送到作业表,因此需要再次运行 php artisan queue:work
    【解决方案3】:

    我找不到这个问题的答案(我不认为 laravel 默认提供这个)所以我写了一个 bash 脚本来重试我需要的所有工作:

    #!/bin/bash
    for i in {53..800}
    do
       php artisan queue:retry $i
    done
    

    【讨论】:

      【解决方案4】:

      通过 artisan 执行此操作的一种方法是指定范围。即使不是范围内的每个 ID 都存在,artisan 仍然会触发所有失败的工作,跳过它找不到的工作。例如,如果您有一堆在 ID 200 和 510 之间稀疏填充的作业,您可以这样做:

      php artisan queue:retry  --range 200-510
      

      【讨论】:

        【解决方案5】:

        我创建了一个命令来执行这个操作: https://gist.github.com/vitorbari/0ed093cf336278311ec070ab22b3ec3d

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-11-04
          • 1970-01-01
          • 2015-03-24
          • 1970-01-01
          • 2013-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-19
          相关资源
          最近更新 更多