Laravel持续运行工匠命令

时间:2019-06-16 13:02:45

标签: laravel

我想做的是在服务器上连续运行artisan命令。我知道Laravel中的cronjobs和调度,但这无法正常工作,因为处理涉及到对API的调用,有时需要1秒,有时需要15秒。所以我想连续运行它。

我已经找到了解决这个难题的几个方法,但还不能完全解决。

假设我在自定义的工匠手工艺命令中拥有此命令:

public function handle()
{
  $this->info('Test');
}

如果我现在运行nohup php artisan customcommand,我将得到appending output to nohup.out。文件nohup.out仅具有“测试”一次。如此看来,它似乎并没有连续运行handle()函数吗?

现在,如果我这样做并使用nohup运行它:

public function handle()
{
    $i = 1;
    while(true)
    {
        $this->info('Test '.$i);
        sleep(5);
        $i++;
    }
}

它确实连续运行,我在Test 1, Test 2, etc中得到nohup.out。但是,使用while(true)循环感觉很麻烦。这是正确的方法吗?

最终,$this->info('Test');将由控制器功能代替,该控制器功能应连续运行,但要确保我掌握正确的基础知识。

更新

如果执行以下操作,我将得到一个PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 20480 bytes),那么在while循环中实例化一个新控制器似乎不是一个好主意吗?

public function handle()
{
    while(true)
    {
        $controller = new MyController;
        $controller->index();
    }
}

0 个答案:

没有答案