我想做的是在服务器上连续运行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();
}
}