【问题标题】:Scheduled task with parameter laravel带参数 laravel 的定时任务
【发布时间】:2018-08-29 21:39:30
【问题描述】:

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

该命令运行良好,是关于使用用户提供的名称压缩文件夹。

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

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

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

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

谢谢

【问题讨论】:

  • 名字从何而来?来自 cli 或通过用户界面的用户输入?
  • 到底是什么问题?
  • 名字来源于@Ben的形式
  • 问题是,我从控制器运行该代码,因此我可以为该方法提供 $nameFile 参数;计划任务从 app/console/kernel.php 文件运行,我不知道如何给它文件名,这是我的问题。谢谢

标签: laravel process parameter-passing scheduled-tasks


【解决方案1】:

假设您根据每个用户输入每天运行 3 次计划任务。你可以为此创建一个雄辩的模型,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();

如果调度任务比较耗时,最好将任务调度到队列中,让worker去消费。

【讨论】:

  • 这似乎是一个很好的解决方案,我会实施它并告诉你进展如何,谢谢
猜你喜欢
  • 2017-10-14
  • 2015-10-12
  • 1970-01-01
  • 2017-07-08
  • 1970-01-01
  • 1970-01-01
  • 2013-09-10
  • 2017-08-02
相关资源
最近更新 更多