我的想法是使用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服务器进程时,我才得到输出。
有关如何获得实时输出的任何建议吗?
答案 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