带参数laravel的计划任务

时间:2018-03-20 22:11:23

标签: laravel process parameter-passing scheduled-tasks

在Laravel 5.6中,我有一个通过Process组件调用命令的控制器。

命令运行正常,是关于压缩具有用户名称的文件夹。

$command = 'tar -czvf '.$nameFile.' storage/images/';

$process = new Process($command);
$process->setTimeout(1800);
$process->run();

我需要每天安排3次这项工作。我看到了文件app / Console / Kernel.php的任务调度;问题是用用户提供的文件名执行进程。

如何在这种情况下编制计划任务?

由于

1 个答案:

答案 0 :(得分:1)

假设您按照每个用户输入每天运行三次计划任务。您可以为此目的创建一个雄辩的模型,ProcessTask说,并将所需的数据保存在Controller中:

ProcessTask::create(['user_id' => $userId, 'name_file' => $nameFile]);

然后,您可以将调度任务设为:

$schedule->call(function () {
    $tasks = ProcessTask::all();
    foreach ($tasks as $task) {
        $command = 'tar -czvf '.$task->name_file.' storage/images/';

        ....
    }
})->hourly()
   ->when(function() { return date('H') % 8 == 0; }) // run tasks at 00:00, 08:00, 16:00
   ->name('processTask')
   ->withoutOverlapping();

如果调度任务非常耗时,最佳做法是将任务分派到队列中,让工作人员使用它。