3

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

$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 命令。

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

任何建议如何获得实时输出?

4

1 回答 1

0

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

$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

于 2012-12-14T15:41:13.637 回答