Symfony2流程不会实时提供反馈

时间:2012-12-09 11:00:04

标签: php symfony symfony-2.1 symfony-process

我的想法是使用Symfony2 Process Class启动一个Minecraft服务器,并希望实时向我提供反馈。因此,如Process cookbook part中所述,我尝试以下代码:

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

由于apache2用户的一些权限问题,我修改了sudoers文件:www-data ALL = (myspecialUser) NOPASSWD: /usr/bin/java
所以www-data用户可以运行java命令。

服务器在后台启动,但我现在的问题是我没有得到任何实时输出。只有当我关闭(或杀死)我的Minecraft服务器进程时,我才得到输出。

有关如何获得实时输出的任何建议吗?

1 个答案:

答案 0 :(得分:0)

不应该调用run()方法,而应该尝试使用start()方法:

$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