Php 在Laravel找不到日程安排工作

Php 在Laravel找不到日程安排工作,php,laravel,Php,Laravel,我有一个计划作业,每次都调用一个函数。这个函数做了很多事情,可能会抛出异常或给我一个错误 这是在循环中完成的,因此如果发生错误,函数将停止工作并被阻塞,直到我删除导致错误的条目(或修复错误) 大概是这样的: public function process_documents() { $documents = document::where("processed", 0)->get(); foreach($documents as $document) { $this->do_thi

我有一个计划作业,每次都调用一个函数。这个函数做了很多事情,可能会抛出异常或给我一个错误

这是在循环中完成的,因此如果发生错误,函数将停止工作并被阻塞,直到我删除导致错误的条目(或修复错误)

大概是这样的:

public function process_documents()
{
$documents = document::where("processed", 0)->get();

foreach($documents as $document)
{
$this->do_this($document);
$this->do_that($document);
$this->finish($document);
}

}
我的解决方案是:

1-生成执行命令的命令

foreach($documents as $document)
{
Artisan::call("document:process",$document->id);
}
2-到处抓


我知道它们都可以工作,但我想知道是否有其他方法。

最好的解决方案是找出流程崩溃的原因并解决此问题。 您可以编写一些代码来处理错误,将问题存储在数据库中,并跳过文档,直到问题得到解决

否则,我相信您的第一个解决方案将是分离不同文档处理的最佳方式。您的代码也将更加干净。

Try-catch只会阻塞代码。

最好的解决方案是找出进程崩溃的原因并解决此问题。 您可以编写一些代码来处理错误,将问题存储在数据库中,并跳过文档,直到问题得到解决

否则,我相信您的第一个解决方案将是分离不同文档处理的最佳方式。您的代码也将更加干净。

Try-catch只会阻塞您的代码。

在命令中使用命令的缺点是您不会从中获得太多好处。实际上,您可以在初始命令中运行代码,并以这种方式捕获错误

您可以实现的另一种解决方案是在单独的分叉流程中从循环内部运行代码,例如使用或

在一个类似于您的用例中成功地实现了这两个方面之后,这实际上取决于您的内在逻辑。如果代码可以同时运行,或者不能同时运行,那么分叉进程可以使主进程保持活动状态


一个小提示如果您测试了这个,请确保检查db连接等。这些连接通常会在分叉过程中丢失。

在命令中使用命令的缺点是您不会从中获得太多好处。实际上,您可以在初始命令中运行代码,并以这种方式捕获错误

您可以实现的另一种解决方案是在单独的分叉流程中从循环内部运行代码,例如使用或

在一个类似于您的用例中成功地实现了这两个方面之后,这实际上取决于您的内在逻辑。如果代码可以同时运行,或者不能同时运行,那么分叉进程可以使主进程保持活动状态


一个小提示如果您测试了这个,请确保检查db连接等。这些连接通常会在分叉过程中丢失。

当然,我每次都会修复它,但我不想在凌晨4:00照看生产,因为发生意外崩溃。特别是当我不是项目中唯一的一个工作人员时。这是一个很好的建议。尽管我认为
try/catch
块有其目的和位置@prgrm还提到函数做了很多工作。研究关注点的分离,并将其分解为更小、更易于管理的功能。我同意每个文档只需一次尝试就可以找到问题。但据我所知,他想在每个函数上都添加一个try-catch。在不同的位置使用多个
try/catch
块,捕获不同的异常并以不同的方式处理它们,如果做得正确且考虑周到,这并不是一件坏事。但我确实同意,在没有适当考虑的情况下把它们扔到一个问题上是错误的。你有不同的看法吗?当然,我每次都会修正它,但我不想在凌晨4:00照看生产,因为意外的事情发生了。特别是当我不是项目中唯一的一个工作人员时。这是一个很好的建议。尽管我认为
try/catch
块有其目的和位置@prgrm还提到函数做了很多工作。研究关注点的分离,并将其分解为更小、更易于管理的功能。我同意每个文档只需一次尝试就可以找到问题。但据我所知,他想在每个函数上都添加一个try-catch。在不同的位置使用多个
try/catch
块,捕获不同的异常并以不同的方式处理它们,如果做得正确且考虑周到,这并不是一件坏事。但我确实同意,在没有适当考虑的情况下把它们扔到一个问题上是错误的。你有不同的看法吗?