【发布时间】:2015-08-27 00:55:20
【问题描述】:
在 laravel 4.2 文档中,如果我想从失败的作业表中重试失败的作业,我应该这样做:
php artisan queue:retry 5
其中 5 是作业 ID。
如何一次重试所有失败的作业?
【问题讨论】:
在 laravel 4.2 文档中,如果我想从失败的作业表中重试失败的作业,我应该这样做:
php artisan queue:retry 5
其中 5 是作业 ID。
如何一次重试所有失败的作业?
【问题讨论】:
您可以通过运行以下命令重试所有失败的作业:php artisan queue:retry all。
这里是官方文档:https://laravel.com/docs/7.x/queues#retrying-failed-jobs
【讨论】:
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。
我找不到这个问题的答案(我不认为 laravel 默认提供这个)所以我写了一个 bash 脚本来重试我需要的所有工作:
#!/bin/bash
for i in {53..800}
do
php artisan queue:retry $i
done
【讨论】:
通过 artisan 执行此操作的一种方法是指定范围。即使不是范围内的每个 ID 都存在,artisan 仍然会触发所有失败的工作,跳过它找不到的工作。例如,如果您有一堆在 ID 200 和 510 之间稀疏填充的作业,您可以这样做:
php artisan queue:retry --range 200-510
【讨论】:
我创建了一个命令来执行这个操作: https://gist.github.com/vitorbari/0ed093cf336278311ec070ab22b3ec3d
【讨论】: