如何在 Ubuntu 伺服器上每天優雅地重啟 Minecraft 伺服器?
我有一個(修改後的)Minecraft 伺服器在 Ubuntu 18.04 伺服器上的 tmux 會話中執行。什麼可能是讓它優雅地關閉然後在每天早上 05:00 重新啟動的好方法?
因此,在 tmux 視窗中,我正在執行如下命令:
while true; do java -Xmx15G -Xms15G -jar forge-1.14.4-28.2.0.jar nogui; sleep 120; done
這會啟動 Minecraft 伺服器,如果它崩潰,幾分鐘後會重新啟動它。但是為了優化性能,我希望 Minecraft 伺服器在早上 05:00 優雅地關閉,就像使用 Minecraft 伺服器命令一樣
/stop
,然後重新啟動。如何做到這一點?伺服器是否有一些 sleep 命令可以在啟動時導致伺服器
/stop
在 24 小時後執行,然後我的小循環腳本重新啟動它?有沒有辦法告訴伺服器在檢測到沒有使用者時停止?
您實際上可以使用外掛來做到這一點!https://www.spigotmc.org/resources/1-8-1-15-ultimateautorestart-need-an-autorestart-plugin-grab-the-best-one-today.64414/就是您要找的!(它將在預定時間停止您的伺服器,然後您的啟動命令將重新啟動它)
如果你不希望你的命令行啟動forge程序,即使它已經在執行,你可以添加一個檢查來查看 forge 是否正在執行。
根據那裡的最高答案,您的程式碼如下所示:
while true; do if pgrep -f "forge" > /dev/null then java -Xmx15G -Xms15G -jar forge-1.14.4-28.2.0.jar nogui & else echo "Minecraft appears to already be running"; fi sleep 120; done
將
&
非同步執行 java,允許在伺服器執行時執行更多命令。(將它們插入到 和 之間fi
)sleep
。這對於解決您的第二點很有用:對於第二個問題,您可能想查看一個rcon 客戶端程序。這允許您從 bash 中訪問 minecraft 命令控制台,並為您處理遊戲的所有協議和安全功能。
你會想要:
- 將“玩家姓名”字元串讀入變數。
rcon -u admin -p password list
- 如果上面的輸出為空,則執行
rcon -u admin -p password stop
以停止伺服器。見下文:
$output=rcon -u admin -p password list if [ -z "$output" ]; then rcon -u admin -p password stop fi
關於這一點的一件小事:
如果您立即停止伺服器(就像您目前的腳本一樣在循環中執行上述程式碼),那麼最後一個斷開連接的玩家可能會立即導致重置。這可能不是您想要的:如果最後一個玩家由於他們的網際網路而斷開連接,他們可能會失去目前狀態。也許增加一點延遲是個好主意:改為要求檢查連續兩次成功。