簡體   English   中英

Bash腳本發送回車鍵或防止貓死機

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM