【问题标题】:Laravel Queue and Jobs - How to re run failed job later onLaravel 队列和作业 - 如何稍后重新运行失败的作业
【发布时间】:2021-01-05 03:48:21
【问题描述】:

提前谢谢你

我的问题很简单

例如,我创建了一个向用户发送电子邮件的工作。但是由于某些语法错误或任何其他异常而失败,因此 laravel 将在 failed_jobs 数据库表中将此作业视为失败的作业,稍后,假设 2 天后我在代码中发现了问题我解决了它,现在我想再次重新运行那个失败的工作,以便我的任务可以完成

这样做的方法是什么?

【问题讨论】:

    标签: laravel laravel-queue laravel-jobs


    【解决方案1】:

    您可以使用查看所有失败的作业 php artisan queue:failed

    如果你只想重试 1 个作业,你可以使用以下(将 5 替换为你要重试的作业的 ID) php artisan queue:retry 5

    如果要重试多个作业,可以使用以下命令(将数字替换为要重试的作业的 ID) php artisan queue:retry 5 6 7 8 9 10

    如果您想重试具有数字 ID 的一系列作业,您可以使用以下内容(将 5 和 10 替换为您要重试的范围) php artisan queue:retry --range=5-10

    最后,如果要重试所有失败的作业,可以使用以下 php artisan queue:retry all

    这些可以在here找到,下次一定要查看文档:)

    【讨论】:

    • 是的,我已经阅读了文档,但为此,我们需要手动正确运行这些命令,或者我们可以制定一个时间表来运行它吗?
    • 如果它是一次性的,你应该手动运行它,(我假设它是一次性的,因为你说你发现了问题并修复了它)或者你的意思是重试所有定期失败的作业或在失败后立即重试
    【解决方案2】:

    你可以运行一个作业超过 1 次

    php artisan queue:work --sleep=1 --tries=5 --timeout=60

    您可以运行所有失败的作业

    php工匠队列:重试所有

    【讨论】:

      【解决方案3】:

      这里值得注意的是,作业在推送到队列时会被序列化。因此,如果语法错误出现在作业代码本身中,那么该作业将始终失败。

      这是因为在 failed_jobs 表中输入了相同的作业负载,因此该作业的后续重试将导致相同的错误。

      【讨论】:

        【解决方案4】:

        以防万一您需要在特定队列上重试失败的作业,您可以查看答案here

        【讨论】:

          猜你喜欢
          • 2014-11-19
          • 2019-03-10
          • 2022-08-20
          • 1970-01-01
          • 2018-08-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多