unRAIDサーバーでMinecraftサーバーを実行しようとしています。
サーバーはシェルで実行され、入力を待ちます。これを停止するには、「stop」と入力してEnterキーを押します。その後、世界は保存され、正常に終了し、再びシェルに戻ります。 NASボックスにTelnetで接続して実行すると、すべてが機能しますが、ボックスから直接実行したいと思います。
以前の最初の試みは次のとおりです。
#define USER_SCRIPT_LABEL Start Minecraft server
#define USER_SCRIPT_DESCR Start minecraft server. needs sde2 mounted first
cd /mnt/disk/sde2/MCunraid
screen -d -m -S minecraft /usr/lib/java/bin/java -Xincgc -Xmx1024M -jar CraftBukkit.jar
MCunraidは、Craftbukkit.jarとすべての世界ファイルを含むフォルダです。対応する画面行を直接入力すると、画面から設定が切り離され、サーバーが起動します。スクリプトでその行を実行すると、画面が設定されていないようです。
サーバーを停止するには、STOPを「入力」してEnterキーを押す必要があります。私の方法は
screen -S minecraft -X stuff "stop $(echo -ne '\r')"
「minecraft」画面にSTOPおよびENTERテキストを送信します。ただし、コマンドラインに直接入力しても機能しません。ただし、「screen -r」を使用すると、サーバーが実行中の画面に移動し、「stop」と入力すると正しく終了します。
リモートでログインして手動で行うと、サーバーはうまくいきます。リモートコンピュータから接続せずに実行するだけです。
ベストアンサー1
私は少なくとも問題の一部、つまりそのstop
部分が機能しない理由を解決できます。実験的に、分離モード()でスクリーンセッションを開始するとウィンドウが選択されscreen -d -m
ず、後で送信された入力がscreen -X stuff
失われます。キーストロークがウィンドウ0()に送信されることを明示的に指定する必要があります-p 0
。それにもかかわらず、何らかの理由でそのスクリーンセッションで別のウィンドウを作成する場合に備えて良い考えです。
screen -S minecraft -p 0 -X stuff "stop^M"
(画面は^M
キーを押すと送信される文字であるcontrol-Mに変換されますEnter。)
スクリプトでセッションを開始するときに発生する問題は、unMENUに関連している可能性があります。