微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在后台执行来自控制器的命令?

如何解决如何在后台执行来自控制器的命令?

我在 Symfony 中创建了一个命令。这将运行并将数据插入到数据库中。我已经测试过了,运行良好。

现在我的问题是我需要从用户单击按钮的 Web 界面执行此命令,并且需要进行此插入。此插入将需要大约 30-45 分钟。所以我需要在后台运行它。

我在 Symfony 中听说过 Process

所以我创建了一个带有路由的控制器,当被调用时会执行以下几行。

use Symfony\Component\Process\Process;


$process = new Process('PHP bin/console app:import:records' . '  > NUL');
$process->run();
return new Response('successfully done',Response::HTTP_OK);

但是什么都没有发生。它只显示最后的响应消息。

有人可以帮我吗?

解决方法

看看this

从上面的链接中提取....


假设这是在 Linux 机器上运行,我一直是这样处理的:

exec(sprintf("%s > %s 2>&1 & echo $! >> %s",$cmd,$outputfile,$pidfile));

这会启动命令 $cmd,将命令输出重定向到 $outputfile,并将进程 ID 写入 $pidfile

这让您可以轻松监控进程正在做什么以及它是否仍在运行。

function isRunning($pid){
    try{
        $result = shell_exec(sprintf("ps %d",$pid));
        if( count(preg_split("/\n/",$result)) > 2){
            return true;
        }
    }catch(Exception $e){}

    return false;
}
,

您可以为此使用 RabbitMQ。 https://www.rabbitmq.com/tutorials/tutorial-one-php.html 推送带有操作信息的消息,然后在消费者中接收该消息并完成工作。 https://symfony.com/doc/current/messenger.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。