在Laravel 5.6中,我有一个通过Process组件调用命令的控制器。
命令运行正常,是关于压缩具有用户名称的文件夹。
$command = 'tar -czvf '.$nameFile.' storage/images/';
$process = new Process($command);
$process->setTimeout(1800);
$process->run();
我需要每天安排3次这项工作。我看到了文件app / Console / Kernel.php的任务调度;问题是用用户提供的文件名执行进程。
如何在这种情况下编制计划任务?
由于
答案 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();
如果调度任务非常耗时,最佳做法是将任务分派到队列中,让工作人员使用它。