2012-12-09 1 views
3

내 생각은 Symfony2 Process Class와 minecraft 서버를 시작하고 실시간으로 나에게 피드백을주고 싶습니다.Symfony2 프로세스 doest't 실시간으로 피드백을 제공합니다

이 때문에 내가의 sudoers를 수정 한 아파치 사용자 일부 권한 문제의
$process = new Process('sudo java -jar -Xms512M -Xmx1G ../server/minecraft_server.jar'); 
    $process->setTimeout(null); 
    $process->run(function ($type, $buffer) { 
     if ('err' === $type) { 
      echo 'ERR > '.$buffer; 
     } else { 
      echo 'OUT > '.$buffer; 
     } 
    }); 

이 함께 파일 :
www-data ALL = (myspecialUser) NOPASSWD: /usr/bin/java 때문에 www가 데이터 사용자가를 실행할 수 Process cookbook part에 설명 된 것처럼 그래서, 나는 다음과 같은 코드를 시도 java 명령.

서버가 백그라운드에서 시작하고 있지만 이제는 실시간 출력이 전혀 나오지 않습니다. 나는 minecraft 서버 프로세스를 종료 (또는 종료) 할 때만 출력을받습니다.

실시간 출력을 얻는 방법에 대한 제안이 있으십니까? 대신 run() 메소드를 호출

+0

어디 출력에 가고? 파일 인 경우 액션에서 해당 파일 내용을 읽고 반환해야합니다. 그런 다음 Ajax에서 주기적으로 호출하여 페이지에서 가져와야합니다. – jaudette

+0

작업 솔루션은 출력을 표준 오류로 리디렉션합니다. 예를 들면 다음과 같습니다 : fprintf (STDERR, "ERR> % s", $ buffer); 하지만 그것이 최선의 해결책인지 잘 모르겠다. – Cyprian

+0

아니, 그게 나를 위해 작동하지 않습니다. 나는 미니 크래프트 서버 (콘솔의 출력이 작동 중임)를 시작하는 심포니 작업을 작성하겠습니다. – F481

답변

0

, 당신이 처음으로 시도해야한다() 하나

$process = new Process('sudo java -jar -Xms512M -Xmx1G ../server/minecraft_server.jar'); 
$process->setTimeout(null); 
$process->start(function ($type, $buffer)); 

echo 'OUT >' . $process->getOutput(); 

http://api.symfony.com/master/Symfony/Component/Process/Process.html#method_start

http://api.symfony.com/master/Symfony/Component/Process/Process.html#method_getOutput

+2

run()도 start()도 나에게 적합하지 않습니다. 두 경우 모두 콜백은 프로세스가 완료 될 때까지 실행되지 않습니다. – Davincho

+2

편집 : 좋아, fread가 더 이상 실행을 차단하는 Windows 버그처럼 보입니다. "프로세스 :: 시작은 파이프를 읽는 메소드에 대한 호출이 차단되어 제대로 작동하지 않습니다."자세한 내용은 https://github.com/symfony/symfony/issues/9755를 참조하십시오. – Davincho