0

我目前正在使用以下命令在屏幕会话中运行 Minecraft 服务器:

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

您可以通过在服务器控制台中发送“停止”来关闭我的世​​界服务器。我正在使用 fifo 来发送来自其他 bash 脚本的命令,并使用 cat 来允许来自屏幕会话中实际 Minecraft 服务器控制台的输入。

但是会发生什么,如果您将命令“停止”放在实际的 Minecraft 控制台中,服务器最终会因为“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

我没有使用过我的世界服务器,所以我不知道我是否在正确的轨道上,但这会工作吗?

#!/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,但至少它不会阻塞服务器。您可能希望在退出时杀死猫的函数中启动我的世界服务器。我建议保留 .pid 文件以备将来使用。:-)

于 2012-05-28T02:43:59.490 回答