3

わかりました、もう一度試してみましょう。:-)

私が試してみると:

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

ウェブページは二度と戻りません。CGI がプロセスの完了を待っているためだと思いますが、サーバーであるため、もちろん完了しません。

これをローカルで試してみて、ターミナルに同じコマンドを入力すると、期待どおりに実行されるので、コマンド ラインに問題がないことがわかります。

だから...質問は:

1) exec はプロセスが完了するまでブロックしますか? 2)いいえの場合、ここで何が起こっているのか、はいの場合、どうすればその動作を変更できますか?

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

したがって、これは実際には一般的な質問ですが、特定の環境に含めて、なぜこれをやろうとしているのかを説明するのに役立つかもしれません. これはすべてLINUX上にあります。

PHP ページから Java プロセスをリモートで起動したいと考えています。もちろん、秘訣は、プロセスが実行され続けることです。プロセスが正常に起動したら、PHP ページを完成させたいと考えています。

では、まずどうすればよいのでしょうか。私が読んだ多くのことを試しましたが、それらを機能させることができません。

2番目の部分はもう少しトリッキーです。minecraft サーバーを停止する方法は、ターミナルで「停止」と入力することです。もちろん、そこに他のコマンドを入力して他のことを行うこともできます...標準入力から読み取るだけです。

停止したい場合、または他のコマンドを送信したい場合は、PHP スクリプトから stdin に接続し、テキストなどを送信する必要があります。

Java プロセスを起動するとき、stdin をファイルに接続してから、将来の PHP スクリプトからファイルに書き込みますか? 知らない。

正しいアプローチに関するいくつかの指針を教えてください。試してみます。それらが機能するかどうか、またはより詳細な質問があるかどうかをお知らせします。

ありがとう!

4

1 に答える 1

2

PHP では、関数 exec(); を使用できます。すなわち:

<?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 という名前の新しい画面が作成され、minecraft サーバーに付属のスクリプトである launch.sh が実行されます。これはすべてバックグラウンドで実行され、シェルが占有されたままになることはありません。

この実行中の画面にコマンドを送信するには、次を使用できます。

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

停止コマンドを送信します。

于 2012-11-12T19:41:35.017 に答える