2014-12-22 1 views
1

새로운 symfony2 프로젝트 (설치는 here로 설명 됨)에서 요청의 일부로 콘솔 프로세스를 시작하고 싶습니다. 응용 프로그램은 nginx + php-fpm을 사용하는 "표준"우분투 14.04 상자에서 실행됩니다. 예를 들면, 나는/명령, 내 예상 결과를 얻을 요청을 발행하고 프로세스가 시작되면symfony/process - 자동으로 시작되지 않는 프로세스

<?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)); 
    } 
} 

:

이 컨트롤러 코드를 고려 나는 htop 등으로 그것을 본다. 이 요청을 다시 발행하면 예상 한 결과가 나오지만 시작할 프로세스가 어디에도 나타나지 않습니다. 오류가없고 아무것도 없습니다.

php5-fpm 서비스를 다시 시작하면 요청을 통해 하나의 프로세스를 다시 시작할 수 있으므로 기본적으로 각 요청 후에 전체 php-service를 다시 시작해야합니다. 따라서 프로그래밍 문제는 아닙니다. 그러나 나는 아직 모른다. 솔직히. 문제는 stackoverflow 이전에 Symfony2 - process launching a symfony2 command에 설명되어 있지만 exec와 함께 해결 방법이 작동하지 않습니다.

실마리가 있습니까?

감사합니다, 감사합니다,이 작업을 완료하는 것을 처리하기 전에

+0

downvote에 관해서는 : 신경 쓰지 마라. 그러나 이것이 나의 첫 번째 질문이었던 것에 따라, 나는 무엇을 개선해야하는지에 대한 짧은 의견에 감사 할 것이다. 감사합니다 :) – Jojo

답변

5

프로세스는 대부분 사망 조조. PHP가 응답을 클라이언트에 반환하고 연결이 닫힌 후에 PHP가이를 종료하기 때문입니다.

Process::start()start a process asynchronously으로 사용됩니다. 당신은 완료하거나 isRunning()으로 아직 완료 여부를 확인하기 위해 하나 wait()에 필요한 :

$process->start(); 

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

는 다른 방법으로, Process::run() 대신 Process:start() 사용합니다.

백그라운드에서 무언가를 처리하려는 경우 메시지 대기열을 사용하십시오.

+0

도와 줘서 고마워. 예, 프로세스를 비동기 적으로 시작하는 것은 의도 된 것이며 요청이 끝나면 fpm이 관련 프로세스를 죽이는 것이 맞다고 생각합니다. 정말이 문제가 발생하기 전에 정확하게 1 번 작동하는 이유를 이해하고 싶습니다. 어쨌든, 메시지 대기열을 통해 모든 것을 구현하는 것은 실제로 해결책입니다. 감사합니다. – Jojo

관련 문제