是否可以根据Laravel中的作业批次制定计划任务?

ki1q1bka  于 2023-02-25  发布在  其他
关注(0)|答案(1)|浏览(140)

我有一个系统,它读取FTP服务器上的大文件,将它们存储在数据库中,然后将它们发送到一个API,该API对数据进行一些处理。我必须对数据进行分块,因为它可能是数十万个寄存器,处理需要一段时间。该处理是在作业上完成的,所以我对这些作业进行了批处理,以便知道一个文件何时完成并继续下一个文件。问题是,我被要求自动检查是否存在“It“这是一个新文件,所以调度程序会进行检查并启动长过程。我完成了任务,并将其编程为每5分钟运行一次,但前一个作业将需要更长的时间,这就是为什么我知道它不会等到第一个任务结束。我以为无重叠可以防止这种情况发生,但由于它没有工作,我不知道是否有一种方法来实现这一点。

odopli94

odopli941#

下面是一个示例,说明如何修改上面的示例,以检查新文件并启动这个漫长的过程:
定义新命令以检查新文件:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class CheckForNewFilesCommand extends Command
{
    protected $signature = 'check-for-new-files';
    protected $description = 'Check for new files and start the long process.';

    public function handle()
    {
        // Check for new files here
        if ($newFilesExist) {
            // Start the long process here
        }
    }
}

在本例中,我们定义了一个名为check-for-new-files的新控制台命令,该命令检查新文件并在新文件存在时启动长过程。
在Console\Kernel类中注册新命令:

protected $commands = [
    Commands\CheckForNewFilesCommand::class,
];

protected function schedule(Schedule $schedule)
{
    $schedule->command('check-for-new-files')->everyFiveMinutes();
}

在本例中,我们在Laravel的任务调度程序中注册CheckForNewFilesCommand命令,因此它每五分钟运行一次。
运行Laravel调度程序:要运行调度程序,您需要在服务器上设置一个cron作业。将以下行添加到服务器的crontab文件中:

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

这将每分钟运行一次Laravel调度程序,并执行任何计划任务。
使用此设置,CheckForNewFilesCommand命令将每五分钟运行一次,检查是否有新的

相关问题