我目前正在运行 StarMade 服务器,并且正在努力让服务器自动重启。
现在我们有 2 个批处理文件,1 个运行服务器,另一个用于重新启动服务器。
运行服务器的批处理文件是:
title Main Starmade Server
java -Xms4096m -Xmx6144m -XX:PermSize=512m -XX:MaxPermSize=1024m -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+UseNUMA -XX:+CMSParallelRemarkEnabled -XX:MaxGCPauseMillis=50 -XX:+UseAdaptiveGCBoundary -XX:-UseGCOverheadLimit -XX:+UseBiasedLocking -XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=90 -XX:UseSSE=3 -XX:+UseLargePages -XX:+UseFastAccessorMethods -XX:+UseStringCache -XX:+UseCompressedOops -XX:+AggressiveOpts -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -Xloggc:memory.log -Xincgc -Xshare:off -jar StarMade.jar -server
EXIT
重启服务器的批处理文件是:
@echo off
title Server Automated Restarter
:start
echo Starting Starmade Server
set time=60
set timer
cd C:\StarMade\StarMade
start StartServer.bat /REALTIME
timeout 120
echo Server Started
timeout 5
:loop
cls
IF %time% GTR 0 (
set /a time=%time% -1
set /a min=%time%/60 +1
echo Server Restarter Active
echo Next Restart In %time% Seconds; Less Than %min% Minutes Remaining
cd C:\Windows\System32
ping (my ip goes here, but I've removed it for this post) -n 2 > NUL
goto loop
)
echo Killing Java Task
timeout 5
taskkill /f /im java.exe
timeout 30
echo Restarting Starmade Server
cls
goto start
显然,这在技术上会使服务器崩溃,因为它是强制停止的。游戏有一个“/force_save"
命令和一个"/shutdown (timeInSec)"
命令。我希望能够使用自动重启器 bat 将这些命令发送到正在运行服务器的其他批处理文件。在服务器运行时,没有其他命令并且在其中被调用运行服务器的批处理文件(除非手动键入)。