【问题标题】:Laravel queue stops randomly without exceptionLaravel 队列无一例外地随机停止
【发布时间】:2020-10-04 18:23:23
【问题描述】:

我有一个带有

的 laravel 队列设置
database

连接。注意这个问题也在redis上。但我目前正在使用数据库连接

failed_jobs

帮助我检查队列过程中发生的任何错误的表格。

我遇到的问题是队列在几个作业后停止工作,而没有任何消息显示原因。但是当我重新启动命令(php artisan queue:work)时,它会拿起剩余的工作。并继续。 (但稍后又停止了)

使用这些值配置作业

public $tries = 1;
public $timeout = 10;

工作代码是,(不是原始代码)

    public function handle()
    {
        try {
            $file = //function to create file;
            $zip = new ZipArchive();
            $zip->open(//zip_path);
            $zip->addFile(//file_path, //file_name);
            $zip->close();
            @unlink(//remove file);
        } catch (\Exception $e) {
            Log::error($e);
        }
    }

失败的功能是这样设置的:

public function failed(\Exception $exception)
{
    Log::error($exception);
    $this->fail($exception);
    $this->delete();
}

但是我没有 failed_job 行,而且我的日志是空的

编辑:我在每一行代码之后添加了简单的信息日志。每次我开始排队时,它都会在最后一行之后停止。所以代码运行正确。所以之后 laravel 就没有开始新的工作了

【问题讨论】:

  • 如果您将此句柄替换为更简单的版本(例如“echo,log only”)以查看它是否与代码或其他内容相关,会发生什么情况。不要忘记重启队列
  • @Ersoy 我做到了。并且在终端中显示所有回声,从而使队列保持活跃。所以这与我的代码有关。但奇怪的是它到达了作业必须处理的代码的末尾。然后停下来。所以 unlink 是最后一行。我在取消链接后添加了一个额外的日志。并且记录正确
  • 您认为任何脚本或命令可能正在执行php artisan queue:restart(可能是cron、minutely 命令等) - 此命令在完成后结束每个正在运行的进程。
  • 不。我再次检查了代码。并且有重启命令的 np 迹象或可能杀死队列的东西

标签: database laravel redis queue


【解决方案1】:

你试过queue:listen 吗?

php artisan queue:listen

另外我猜你需要Supervisor 来让你的工人活着。

【讨论】:

  • 是的。我尝试使用听。那行得通。队列继续工作。但是在对该命令进行了更多研究之后,由于它使用的资源更多,因此在生产环境中运行并不是最好的。
猜你喜欢
  • 1970-01-01
  • 2022-10-20
  • 1970-01-01
  • 2019-09-09
  • 1970-01-01
  • 2021-01-15
  • 1970-01-01
  • 2017-11-28
  • 2018-11-12
相关资源
最近更新 更多