【发布时间】:2012-11-27 00:46:40
【问题描述】:
我的想法是用Symfony2 Process Class 启动一个我的世界服务器,并想实时给我反馈。所以,就像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 命令。
服务器正在后台启动,但我现在的问题是我没有得到任何实时输出。只有当我关闭(或杀死)我的世界服务器进程时,我才会得到输出。
对如何获得实时输出有什么建议吗?
【问题讨论】:
-
输出去哪里了?如果它是一个文件,那么您应该从一个操作中读取该文件内容并将其返回,然后从 ajax 定期调用它以将其放在您的页面上。
-
工作解决方案将输出重定向到标准错误。例如这对你有用: fprintf(STDERR, "ERR > %s", $buffer);但我不确定这是否是最好的解决方案
-
不,这对我不起作用。我想我会写一个 symfony 任务来启动我的世界服务器(控制台上的输出正在工作)
-
我在 OSX 本地有同样的问题,命令运行空闲超时......在 ubuntu 上,进程启动并且执行后不关闭。有什么解决办法吗?
标签: php symfony symfony-2.1 symfony-process