【发布时间】: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