M1 Mac Mini上制作Minecraft服务器崩溃重启.command脚本求助
解决Minecraft服务器崩溃自动重启问题
问题描述
将M1 Mac Mini改造为全天候运行的Minecraft服务器,但存在服务器崩溃后无人手动重启的问题,需要制作.command文件实现以下任一功能:
- A)每分钟检测服务器状态,发现宕机后终止进程并重启
- B)服务器崩溃终端退出后自动重启(优先方案A)
现有脚本错误分析
你使用的脚本存在for循环语法错误,Bash的for循环必须用do和done包裹循环体,原脚本缺失do,导致触发语法报错。
修复后的方案B脚本(服务器崩溃后自动重启)
先提供修复语法错误后的基础自动重启脚本,实现服务器崩溃终端退出后自动重启:
#!/bin/bash while true do # 切换到服务器目录(建议用绝对路径避免目录变化问题) cd /Users/davidking/Desktop/server # 启动Minecraft服务器 /Library/Internet_Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java -Xmx7G -Xms7G -jar forgeserver.jar # 服务器退出后执行重启倒计时 echo "如果要彻底停止服务器进程,请在倒计时结束前按Ctrl+C!" echo "重启倒计时:" for i in 5 4 3 2 1 do echo "$i..." sleep 1 done echo "正在重启服务器!" done
脚本说明
- 开头添加
#!/bin/bash指定解释器,避免环境差异引发问题 - 将
cd Desktop/server改为绝对路径/Users/davidking/Desktop/server,防止终端默认目录变化导致找不到文件 - 补全
for循环的do语句,修复语法错误 - 服务器进程结束(崩溃或正常关闭)后,进入倒计时,倒计时结束自动重启;若要停止脚本,在倒计时期间按
Ctrl+C即可
方案A实现(定时检测并重启)
若要实现每分钟检测服务器状态、宕机后自动重启,可使用以下脚本:
#!/bin/bash SERVER_IP="127.0.0.1" SERVER_PORT="25565" SERVER_DIR="/Users/davidking/Desktop/server" JAVA_PATH="/Library/Internet_Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java" SERVER_JAR="forgeserver.jar" HEAP_ARGS="-Xmx7G -Xms7G" # 启动服务器函数 start_server() { echo "启动Minecraft服务器..." cd "$SERVER_DIR" $JAVA_PATH $HEAP_ARGS -jar $SERVER_JAR & SERVER_PID=$! echo "服务器PID: $SERVER_PID" } # 初始化启动服务器 start_server while true do # 用nc命令检测服务器端口是否开放(比Ping更准确,直接检测服务状态) if ! nc -z "$SERVER_IP" "$SERVER_PORT" 2>/dev/null; then echo "服务器已宕机,正在重启..." # 终止残留进程(如果存在) if [ -n "$SERVER_PID" ]; then kill -9 "$SERVER_PID" 2>/dev/null fi # 重启服务器 start_server fi # 每分钟检测一次 sleep 60 done
方案A说明
- 使用
nc(netcat)检测Minecraft默认端口25565的连通性,相比Ping更精准——Ping仅检测主机存活,端口检测才能确认服务器服务正常 - 脚本启动后先初始化启动服务器,之后每分钟进行一次端口检测
- 若端口无法连通,会杀掉旧进程(如果存在)并重启服务器
- 若你的服务器端口不是25565,需修改
SERVER_PORT的值
使用注意事项
- 将脚本保存为
start.command后,需赋予执行权限:chmod +x /Users/davidking/Desktop/start.command - 所有文件和目录建议使用绝对路径,避免因终端工作目录变化导致错误
- 若Java路径不正确,可通过
which java命令查看正确路径,替换脚本中的JAVA_PATH
内容的提问来源于stack exchange,提问作者Isna Owo
相关产品推荐
相关产品推荐

