[英]Bash script send enter key or prevent cat hang
我目前正在使用以下命令在屏幕會話中運行Minecraft服務器:
(tail -f /path/to/fifo & cat) | java -Xmx2048M -jar minecraft_server.jar nogui
您可以通過在服務器控制台中發送“停止”來關閉Minecraft服務器。 我正在使用fifo從其他bash腳本發送命令,並且使用cat允許在屏幕會話中來自實際Minecraft服務器控制台的輸入。
但是,發生的是,如果在實際的minecraft控制台中放置命令“ stop”,則由於“ 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
我沒有使用過我的世界服務器,所以我不知道我是否在正確的軌道上,但是這行得通嗎?
#!/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文件以備將來使用。 :-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.