3

私の考えは、 Symfony2 プロセス クラスを使用してマインクラフト サーバーを起動し、リアルタイムでフィードバックを提供したいと考えています。そこで、プロセス クックブック パートで説明したように、次のコードを試します。

$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サーバープロセスをシャットダウン(または強制終了)した場合にのみ、出力が得られます。

リアルタイム出力を取得する方法について何か提案はありますか?

4

1 に答える 1

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

于 2012-12-14T15:41:13.637 に答える