【发布时间】:2012-05-28 02:31:04
【问题描述】:
我目前正在使用此命令在屏幕会话中运行 Minecraft 服务器:
(tail -f /path/to/fifo & cat) | java -Xmx2048M -jar minecraft_server.jar nogui
您可以通过在服务器控制台中发送“停止”来关闭我的世界服务器。我正在使用 fifo 发送来自其他 bash 脚本的命令,并使用 cat 来允许来自屏幕会话中实际 Minecraft 服务器控制台的输入。
但是,如果您在实际的 Minecraft 控制台中输入命令“停止”,服务器最终会因为“cat”命令而在它应该退出之前挂起。解决这个问题的唯一方法是在发送停止命令后再次按 Enter。
我怎样才能让“猫”不导致它挂起?
编辑:完整的脚本。
#!/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
【问题讨论】: