我目前正在使用此命令在屏幕会话中运行Minecraft服务器:
(tail -f /path/to/fifo & cat) | java -Xmx2048M -jar minecraft_server.jar nogui
您可以通过在服务器控制台中发送'stop'来关闭Minecraft服务器。我正在使用fifo从其他bash脚本发送命令,而cat则允许在屏幕会话中从实际的Minecraft服务器控制台输入。
但是,如果您将命令'stop'放在实际的Minecraft控制台中,则服务器会因为'cat'命令而在它应该退出之前停止。唯一的办法就是在发送停止命令后再次按回车。
如何让'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
答案 0 :(得分: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文件以备将来使用。 : - )