【发布时间】:2015-01-02 02:34:46
【问题描述】:
我正在尝试使用 /proc/{pid}/fd/0 向 minecraft 服务器 jar 发送命令,但服务器不执行命令。
要复制我正在尝试做的事情,您可以在基于 Debian 的机器上执行此操作(可能还有其他 Linux 发行版)。
我用什么来测试这个:
- Ubuntu 14.04
- minecraft_server.jar(用 1.8 测试)
- OpenJDK 运行时环境(使用 default-jre-headless 安装)
第一个控制台:
$ java -jar minecraft_server.jar nogui
响应:[ ...服务器启动并等待输入]
say hi
响应:[19:52:23] [服务器线程/INFO]:[服务器] hi
第二个控制台:
现在当我切换到第二个控制台时,服务器仍在第一个运行,我写道:
echo "say hi2" >> /proc/$(pidof java)/fd/0
在我切换回第一个控制台之前,一切看起来都很好。我可以看到文本“say hi2”,但服务器无法识别它。我可以再次在第一个控制台中编写另一个命令,就好像从第二个控制台输入的文本甚至不存在一样。
这是为什么?更重要的是,如何正确使用 /proc/{pid}/fd/0 将命令发送到 java jar 文件?
我不知道这是否是某种我不知道的 Java 问题,我是否可以在执行服务器时使用一些标志或其他东西,或者是否是服务器 jar 本身就是问题所在。 .
我知道您可以使用 screen、tail -f 或某种服务器包装器来完成此操作,但这不是我所追求的。我想以某种方式使用这种方法发送命令。
【问题讨论】:
-
也许您可以通过在启动时将 socat 的实例通过管道传输到进程的标准输入,然后使用该路径注入命令来实现您的最终目标?
标签: java linux bash stdin minecraft