加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 21:52:37 所属栏目:PHP教程 来源:网络整理
导读:在一个新的symfony2项目(如 here所述的安装)中,我想作为请求的一部分启动一个控制台进程.该应用程序在nginx php-fpm的“标准”ubuntu 14.04框上运行. 考虑一下这个控制器代码: ?phpnamespace AppBundleController;use SymfonyBundleFrameworkBundleCont
在一个新的symfony2项目(如 here所述的安装)中,我想作为请求的一部分启动一个控制台进程.该应用程序在nginx php-fpm的“标准”ubuntu 14.04框上运行.

考虑一下这个控制器代码:

<?php
namespace AppBundleController;


use SymfonyBundleFrameworkBundleControllerController;
use SymfonyComponentHttpFoundationJsonResponse;
use SymfonyComponentProcessProcess;
use SensioBundleFrameworkExtraBundleConfigurationRoute;

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().

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读