3

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

如果我尝试:

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

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

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

所以……问题是:

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

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

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

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

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

第二部分有点棘手。停止 minecraft 服务器的方式是在终端中键入“停止”。当然,您可以在那里输入其他命令来执行其他操作……它只是从标准输入读取。

如果我想停止它,或者向它发送其他命令,我需要从 PHP 脚本连接到标准输入并发送文本或其他内容。

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

只要给我一些关于正确方法的指示,我就会尝试它们。我会让你知道他们是否有效,或者我是否有更详细的问题。

谢谢!

4

1 回答 1

2

在 php 中,您可以使用函数 exec(); IE:

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

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

编辑

你用过“屏幕”这个程序吗?

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

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

这将创建一个名为 Minecraft 的新屏幕,并执行 launch.sh,这是我的世界服务器附带的脚本。这一切现在都将在后台运行,并且不会占用 shell。

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

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

发送停止命令。

于 2012-11-12T19:41:35.017 回答