現在、次のコマンドを使用して画面セッションで 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