【发布时间】:2015-02-20 18:25:21
【问题描述】:
在一个新的 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-service。所以这可能不是编程问题。但老实说,我还不知道。 之前在 stackoverflow 上描述了这个问题,Symfony2 - process launching a symfony2 command,但是使用 exec 的解决方法对我不起作用。
有人知道吗?
谢谢,问候, 乔乔
【问题讨论】:
-
至于否决票:没关系,但由于这是我在这里的第一个问题,我希望能就需要改进的地方提供简短的反馈。谢谢:)
标签: php symfony nginx process symfony-process