php – symfony / process – 静默处理而不启动

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – symfony / process – 静默处理而不启动脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
一个新的symfony2项目(如 here所述的安装)中,我想作为请求的一部分启动一个控制台进程.该应用程序在Nginx PHP-FPM的“标准”ubuntu 14.04框上运行.

考虑一下这个控制器代码

<?PHP
namespace AppBundle\Controller;


use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\component\HttpFoundation\JsonResponse;
use Symfony\Component\PRocess\Process;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

class CommandController extends Controller
{
    /**
     * @Route("/command")
     * @return JsonResponse
     */
    public function commandAction ()
    {
        $rootDir = $this->get('kernel')->getRootDir();
        $env = $this->get('kernel')->getEnvironment();
        $commandline = $rootDir . '/console --env=' . $env . ' acme:hello --who jojo'
        $process = new Process($commandline);
        $process->start();
        return new JsonResponse(array('command' => $commandline));
    }
}

当我向/ command发出请求时,我得到了我的预期结果并且该过程开始,例如我用htop之类的东西看到了它.
当我再次发出此请求时,我得到了我的预期结果,但是要启动的进程不会出现在任何地方.没有错误,没有任何错误.

重新启动PHP5-fpm服务使我能够再次通过请求启动一个进程,所以基本上我需要在每次请求后重新启动整个PHP服务.所以这可能不是编程问题.但老实说,我还不知道.
问题是在Symfony2 – process launching a symfony2 command之前的stackoverflow上描述的,但exec的解决方法对我不起作用.

有人有线索吗?

感谢和问候,
乔乔

解决方法

您的流程很可能在它完成工作之前就已经消亡了.这是因为PHP在响应返回给客户端并且连接关闭后将其杀死.

Process :: start()用于start a process asynchronously.您需要wait()才能完成或检查isRunning()是否已完成:

$process->start();

$process->waIT(function ($tyPE,$buffer) {
    // do sth while you wait
});

或者,使用Process :: run()而不是Process:start().

如果要在后台处理某些内容,请使用消息队列.

脚本宝典总结

以上是脚本宝典为你收集整理的php – symfony / process – 静默处理而不启动全部内容,希望文章能够帮你解决php – symfony / process – 静默处理而不启动所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。