通过php启动和停止minecraft(java进程)

时间:2012-11-12 19:34:50

标签: java php linux process minecraft

好的,让我再试一次。 : - )

如果我尝试:

<?php
exec("java -Xms1024M -Xmx1024M -jar craftbukkit-1.4.2-R0.2.jar -o true");
?>

网页永远不会返回。我相信这是因为CGI正在等待这个过程完成,当然它从来没有做过,因为它是一个服务器。

我在本地尝试这个,如果我在终端中输入相同的命令,它会按预期运行,所以我知道命令行没有问题。

所以......问题是:

1)exec阻塞直到进程完成? 2)如果不是,这里发生了什么,如果是,我该如何改变这种行为?

=============================================== ==============

所以这是一个普遍的问题,但我已经包含在特定的环境中,这可能有助于解释我为什么要这样做。这一切都在LINUX上。

我想从PHP页面远程启动Java进程。当然,技巧是流程将继续运行,并且我希望在流程成功启动后完成PHP页面。

那么,首先我该怎么做?我已经尝试过很多我读过的东西,但却无法让它们发挥作用。

第二部分有点棘手。您停止Minecraft服务器的方式是在终端中键入“停止”。当然,你可以在那里输入其他命令做其他事情......它只是从stdin读取。

如果我想停止它,或者发送其他命令,我需要从PHP脚本连接到stdin并发送文本或其他东西。

当我启动java进程时,是否将stdin连接到一个文件然后从未来的PHP脚本写入该文件?我不知道。

请给我一些关于正确方法的指示,并尝试一下。如果他们有效或者我有更详细的问题,我会告诉你。

谢谢!

1 个答案:

答案 0 :(得分:2)

在php中你可以使用函数exec(); 即:

<?php
    if($method == "start"){
        exec("java -jar minecraft_server.jar");
    }else if($method == "stop"){
        exec("pkill java");
    }
?>

我不熟悉Minecraft的确切命令,但这是它背后的理论。

修改

您是否使用过“screen”程序?

使用以下命令创建运行Minecraft服务器的新分离屏幕:

screen -dmS Minecraft /home/username/minecraft/launch.sh

这将创建一个名为Minecraft的新屏幕,并执行launch.sh,即minecraft服务器附带的脚本。这些都将在后台运行,而不是保持shell占用。

要将命令发送到此运行屏幕,您可以使用:

screen -S Minecraft -X stuff $'stop\n'

发送停止命令。