0

現在、次のコマンドを使用して画面セッションで Minecraft サーバーを実行しています。

(tail -f /path/to/fifo & cat) | java -Xmx2048M -jar minecraft_server.jar nogui

サーバー コンソールで 'stop' を送信すると、Minecraft サーバーをシャットダウンできます。fifo を使用して他の bash スクリプトからコマンドを送信し、cat を使用して screen セッションで実際の Minecraft サーバー コンソールからの入力を許可しています。

ただし、実際の minecraft コンソールに「stop」コマンドを入力すると、「cat」コマンドが原因でサーバーが終了する直前にハングアップしてしまいます。これを回避する唯一の方法は、停止コマンドを送信した後にもう一度 Enter キーを押すことです。

「cat」でこれがハングしないようにするにはどうすればよいですか?

編集:完全なスクリプト。

#!/bin/bash

serverDirectory=/opt/games/minecraft
pidFile=$serverDirectory/server.pid
fifoFile=$serverDirectory/server.fifo

cleanup() {
    rm -f $pidFile
    rm -f $fifoFile
}

if [ ! -p $fifoFile ]; then
    mkfifo $fifoFile && chmod 0777 $fifoFile
fi

echo $$ > $pidFile

# restart server if it stops
while true
do
    # how minecraft server should handle an interruption
    trap "{ echo 'stop' > $fifoFile ; }" SIGINT
    (tail -f $fifoFile & cat) | java -Xmx2048M -jar minecraft_server.jar nogui
    echo "Restarting server...."
    # if interruption occurs before we restart, stop trying to restart and clean up
    trap "{ cleanup ; exit 0 ; }" SIGINT SIGTERM
    sleep 5
done
4

1 に答える 1

1

私はMinecraftサーバーを使用したことがないので、ここで正しい軌道に乗っているかどうかわかりませんが、これは機能しますか?

#!/bin/sh

fifo="/path/to/fifo"
mkfifo $fifo
trap "rm -f $fifo" 0 1 2 3 6 15

/path/to/java -Xmx2048M -jar minecraft_server.jar nogui < $fifo &
echo $? > /path/to/minecraft.pid
cat > $fifo

サーバーが終了しても、これはまだcat終了しませんが、少なくともサーバーをブロックしません。終了時に猫を殺す関数で minecraft サーバーを起動したい場合があります。将来の使用に備えて .pid ファイルを保存しておくことをお勧めします。:-)

于 2012-05-28T02:43:59.490 に答える