首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel连续运行技工命令

Laravel连续运行技工命令
EN

Stack Overflow用户
提问于 2019-06-16 13:02:45
回答 1查看 284关注 0票数 2

我想要做的是在服务器上连续运行一个artisan命令。我知道克隆作业和Laravel中的调度,但这是行不通的,因为处理涉及调用API,有时需要1秒,有时需要15秒。所以我想继续运行它。

我在这个谜题上找到了几个碎片,但不能完全拼凑在一起。

假设我在我的自定义手工工匠命令中有这样的命令:

代码语言:javascript
运行
复制
public function handle()
{
  $this->info('Test');
}

如果我现在运行nohup php artisan customcommand,就会得到appending output to nohup.out。文件nohup.out只有一次“测试”。所以,它似乎没有连续地运行handle()函数?

现在,如果我这样做,并运行它与nohup

代码语言:javascript
运行
复制
public function handle()
{
    $i = 1;
    while(true)
    {
        $this->info('Test '.$i);
        sleep(5);
        $i++;
    }
}

它确实是连续运行的,我在nohup.out中得到了nohup.out。不过,使用while(true)循环会让人觉得很烦躁。这样做对吗?

最终,$this->info('Test');将被一个控制器函数所取代,该函数应该持续运行,但希望确保我的基本操作正确。

更新

如果我这样做,我会得到一个PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 20480 bytes),所以在while循环中实例化一个新控制器似乎不是一个好主意吗?

代码语言:javascript
运行
复制
public function handle()
{
    while(true)
    {
        $controller = new MyController;
        $controller->index();
    }
}
EN

回答 1

Stack Overflow用户

发布于 2022-03-02 17:52:08

因为我可以从你的文章中读到,你似乎想要运行调用,然后直接运行后运行下一个,以此类推。而不是让它像每一分钟或每一秒一样运行。

当前要做的是,每次遍历循环时都会创建MyController的一个新实例。

因此,要解决这个问题,您可以将其移出循环。

代码语言:javascript
运行
复制
public function handle()
{
    $controller = new MyController;

    while(true)
    {
        $controller->index();
    }

}

您要确保的是,不要每次在循环中运行时都继续创建新的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56619090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档