新しい symfony2 プロジェクト (ここで説明するインストール) で、リクエストの一部としてコンソール プロセスを開始したいと思います。アプリは、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 サービスを再起動すると、リクエストによって 1 つのプロセスを再度開始できるようになるため、基本的には、リクエストごとに php サービス全体を再起動する必要があります。したがって、これはおそらくプログラミングの問題ではありません。でも、正直まだわかりません。この問題は、前にSymfony2 - process launching a symfony2 command のstackoverflow で説明されていましたが、exec による回避策がうまくいきません。
誰かが手がかりを持っていますか?
ありがとう、よろしく、ジョジョ