好的,让我再试一次。 : - )
如果我尝试:
<?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脚本写入该文件?我不知道。
请给我一些关于正确方法的指示,并尝试一下。如果他们有效或者我有更详细的问题,我会告诉你。
谢谢!
答案 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'
发送停止命令。