4

新しい 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 による回避策がうまくいきません。

誰かが手がかりを持っていますか?

ありがとう、よろしく、ジョジョ

4

2 に答える 2

0

2020年の更新は1つだけです....サイレントエラーが発生していたので、デバッグするためにこれを行いました

$process = new Process($command);
$process->run();
print_r($process->getErrorOutput());
于 2020-07-02T20:33:50.167 に答える