Minecraft开服脚本

总是有人不看完就跑来问我,所以把常见问题及其解决办法放到最上面

常见问题

Unrecognized VM option ‘xxx’

这里是你使用的开服脚本中的某个参数,不被你的Java接受

xxx可能是 +AggressiveOpts 也可能是 +UseCompressedOops 或者是你启动脚本中的其他不被接受的参数

解决办法:

将开服脚本中的包含xxx的那一段参数删除

Unrecognized VM option '+AggressiveOpts' 就删除 -XX:+AggressiveOpts

Unrecognized VM option ' +UseCompressedOops ' 就删除 -XX:+UseCompressedOops

Could not reserve enough space for object heap

设置了过大的内存

解决办法:

将开服脚本中的内存调小(注意,32位java的可用内存受限制,只能使用最大1.4G到1.6G的内存,解决办法是更换64位的Java)

将参数换成 -Xmx1G -Xms1G

内存分配一般是给系统所有可用内存大小的2/3(给系统和其他应用留出空间),如果你电脑的内存低于1G,就不要想着开服了

页面文件太小,无法完成操作

设置了过大的内存

解决办法:

将开服脚本中的内存调小(注意,32位java的可用内存受限制,只能使用最大1.4G到1.6G的内存,解决办法是更换64位的Java)

将参数换成 -Xmx1G -Xms1G

内存分配一般是给系统所有可用内存大小的2/3(给系统和其他应用留出空间),如果你电脑的内存低于1G,就不要想着开服了

1.17及以后版本使用了低于Java16的Java

Forge的报错
Fabric的报错
Paper的报错
Spigot的报错

只要出现了以上图片中类似的报错,就意味着你需要使用Java16

解决办法:(二选一)

  1. 在启动脚本中指定Java路径(推荐)(方法见上面指定Java的脚本)
  2. 卸载其他版本的Java,只留Java16(不推荐)

1.16及以前版本使用了高于(包括)Java16的Java

只要出现了以上图片中类似的报错,就意味着你需要使用Java16之前的版本(不包括Java16,Java8/11等LTS版本都是不错的选择)

解决办法:(二选一)

  1. 在启动脚本中指定Java路径(推荐)(方法见上面指定Java的脚本)
  2. 卸载其他版本的Java,只留Java8/11(不推荐)

注意

本教程中均以server.jar作为核心名字,实际使用时请手动改成你的服务端核心jar名字

本教程中均以server.jar作为核心名字,实际使用时请手动改成你的服务端核心jar名字

本教程中均以server.jar作为核心名字,实际使用时请手动改成你的服务端核心jar名字

本教程中均以server.jar作为核心名字,实际使用时请手动改成你的服务端核心jar名字

本教程中均以server.jar作为核心名字,实际使用时请手动改成你的服务端核心jar名字

本教程中均以server.jar作为核心名字,实际使用时请手动改成你的服务端核心jar名字

本教程中均以server.jar作为核心名字,实际使用时请手动改成你的服务端核心jar名字

再看不到的跑来问我就要做好挨喷的准备

开服需要安装Java (64位机器装64位Java)

安装Java教程:http://sakuramc.top:9999/?p=379

通用

开服所用的指令就一条,一般是java开头的那一条,其他部分都是起辅助作用的,比如设置cmd窗口标题、自动重启等

这里拿一个典型的开服指令举例 java -Xmx2G -Xms2G -jar server.jar nogui

这里的 server.jar 是示例,实际使用时请手动改成核心jar的名字

Java

橙色字 java 意为使用可执行文件java,一般java需要在path中(设置path见http://sakuramc.top:9999/?p=372(linux)及http://sakuramc.top:9999/?p=164(win)),如果需要指定使用的java的话需要修改path中的java或者使用绝对路径

JVM参数

红色字 -Xmx2G -Xms2g -jar 是jvm参数

设置jvm参数是开服非常重要的一环,使用的最大内存,最小内存,优化参数等都是jvm参数

-Xmx2G 设置最大可用内存为2G,这里红字的2G可以替换成其他内存大小,单位除了G之外可以用M,例如 -Xmx256M

-Xms2G 设置初始内存为2G,这里红字的2G可以替换成其他内存大小,单位除了G之外可以用M,例如 -Xms256M

-jar 意为通过jar文件启动,后面需要接文件名字,如果后面接的jar文件名字错误或者jar文件损坏则会报错

其他优化参数见 https://aikar.co/2018/07/02/tuning-the-jvm-g1gc-garbage-collector-flags-for-minecraft/

MC服务端参数

紫色字 nogui 意为不显示mc自带的ui界面,不管是否添加此参数,服务端始终会将日志输出至命令行

自带的UI界面效果如下(下图是paper的,和原版略有区别)

Windows

创建脚本

在服务端文件夹新建一个txt文件,将其改名为start.bat

若文件没有显示默认的txt扩展名,请看 http://sakuramc.top:9999/?p=279

编辑脚本

右键bat文件,点击编辑

打开后输入下方的开服代码

如果是新建的脚本,文件>另存为 下方的编码选择ANSI,否则中文会乱码,保存

WIN脚本示例

@ECHO OFF
@REM 作者404E
set a=0
echo ------------------------------------------------------------------
echo --                                                              --
echo --                           正在启动                           --
echo --                                                              --
echo ------------------------------------------------------------------
:start
set b = %date:~0,4%.%date:~5,2%.%date:~8,2% %time:~0,2%:%time:~3,2%:%date:~8,2%
title 服务端 重启%a%次 上次重启于%b%
set date1=%date:~0,4%%date:~5,2%%date:~8,2%
set time1=%time:~0,2%%time:~3,2%%time:~6,2%
java -Xms2G -Xmx2G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar server.jar nogui
set date2=%date:~0,4%%date:~5,2%%date:~8,2%
set /a c=%time:~0,2%%time:~3,2%%time:~6,2% - %time1%
if %c% LEQ 1 (
    if %date2% == %date1% (
        echo ------------------------------------------------------------------
        echo --                                                              --
        echo --                  :( 启动异常,请检查启动参数                  --
        echo --                  或者咨询其他人,按任意键退出                 --
        echo --                                                              --
        echo ------------------------------------------------------------------
        pause>null
        exit
    )
)
set /a a=%a%+1
echo ------------------------------------------------------------------
echo --                                                              --
echo --                       将在3秒后自动重启                      --
echo --                       按任意键跳过等待                       --
echo --                      或者直接关闭服务端                      --
echo --                                                              --
echo ------------------------------------------------------------------
timeout /T 3
goto start

以上是我用的脚本,优化参数 https://aikar.co/2018/07/02/tuning-the-jvm-g1gc-garbage-collector-flags-for-minecraft/

Linux步骤

创建&编辑脚本

vi start.sh

按i或insert键进入编辑模式

输入下方示例的中的脚本代码

按esc,输入:wq保存

给予可执行权限

使用 sudo chmod +x start.sh 给脚本添加可执行权限(root用户可不加sudo,直接使用chmod)

脚本示例

#!/bin/bash
#作者404E
echo '------------------------------------------------------------------'
echo '-                                                                -'
echo '-                         开始启动服务端                         -'
echo '-                                                                -'
echo '------------------------------------------------------------------'
while true;
do
    java -Xms2G -Xmx2G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar server.jar nogui
    echo '------------------------------------------------------------------'
    echo '-                                                                -'
    echo '-                       服务器将在3秒后重启                      -'
    echo '-                     按 ctrl + c 停止服务端                     -'
    echo '-                                                                -'
    echo '------------------------------------------------------------------'
    for i in $(seq 3 -1 1)
    do
        echo -n "·"
        sleep 1s
    done
    echo ''
    echo '------------------------------------------------------------------'
    echo '-                                                                -'
    echo '-                         开始重启服务端                         -'
    echo '-                                                                -'
    echo '------------------------------------------------------------------'
done

以上是我用的脚本,优化参数 https://aikar.co/2018/07/02/tuning-the-jvm-g1gc-garbage-collector-flags-for-minecraft/

重启时自动备份的脚本

#!/bin/bash
#作者404E
echo '------------------------------------------------------------------'
echo '-                                                                -'
echo '-                         开始启动服务端                         -'
echo '-                                                                -'
echo '------------------------------------------------------------------'
while true;
do
    java -Xms2G -Xmx2G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar server.jar nogui
    # 备份
    echo '------------------------------------------------------------------'
    echo '-                                                                -'
    echo '-                     服务器将在3秒后开始备份                    -'
    echo '-                     按 ctrl + c 停止服务端                     -'
    echo '-                                                                -'
    echo '------------------------------------------------------------------'
    for i in $(seq 3 -1 1)
    do
    echo -n "·"
    sleep 1s
    done
    # 备份保留个数
    c=5
    if [ ! -d "backup" ];then
    mkdir backup
    fi
    rm -rf backup/$c.tar.gz
    for((i=$c;i>0;i--));
    do if [ -f "backup/"$i".tar.gz" ];then
    mv backup/$i.tar.gz backup/`expr $i + 1`.tar.gz
    fi done
    # 创建备份指令,可自行添加文件夹(将#去掉)
    tar -zcf backup/1.tar.gz world #world_nether world_the_end
    # 备份结束
    echo '------------------------------------------------------------------'
    echo '-                                                                -'
    echo '-                  备份完成  服务器将在3秒后重启                 -'
    echo '-                     按 ctrl + c 停止服务端                     -'
    echo '-                                                                -'
    echo '------------------------------------------------------------------'
    for i in $(seq 3 -1 1)
    do
        echo -n "·"
        sleep 1s
    done
    echo ''
    echo '------------------------------------------------------------------'
    echo '-                                                                -'
    echo '-                         开始重启服务端                         -'
    echo '-                                                                -'
    echo '------------------------------------------------------------------'
done

评论

  1. user
    2 年前
    2022-5-14 19:04:08

    666

    • 666
      user
      9 月前
      2023-8-08 11:09:32

      !/bin/bash

      echo ‘——————————————————————‘
      echo ‘- -‘
      echo ‘- 开始启动服务端 -‘
      echo ‘- -‘
      echo ‘——————————————————————‘
      while true
      do
      d=$(date “+%Y.%m.%d %H:%M:%S”)
      echo -e “33]0; 服务端 “$d”07″”c”
      /home/container/jdk-18.0.2.1/bin/java -jar -Xms2G -Xmx2G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar spigot-1.19.jar nogui
      h=$(date “+%H”)
      if [ $h -gt 1 ] && [ $h -lt 6 ]; then
      echo ‘——————————————————————‘
      echo ‘- -‘
      echo ‘- 服务器将在3秒后开始备份 -‘
      echo ‘- 按 ctrl + c 停止服务端 -‘
      echo ‘- -‘
      echo ‘——————————————————————‘
      i=3
      while [ $i -gt 0 ]; do
      echo -n “·”
      sleep 1s
      i=$((i – 1))
      done
      c=5
      if [ ! -d “backup” ]; then
      mkdir backup
      fi
      rm -rf “backup/$c.tar.gz”
      i=$c
      while [ $i -gt 0 ]; do
      if [ -f “backup/$i.tar.gz” ]; then
      mv “backup/$i.tar.gz” “backup/$(expr $i + 1).tar.gz”
      fi
      i=$((i – 1))
      done
      tar -zcf “backup/1.tar.gz” world #world_nether world_the_end
      fi
      echo ‘——————————————————————‘
      echo ‘- -‘
      echo ‘- 服务器将在3秒后重启 -‘
      echo ‘- 按 ctrl + c 停止服务端 -‘
      echo ‘- -‘
      echo ‘——————————————————————‘
      i=3
      while [ $i -gt 0 ]; do
      echo -n “·”
      sleep 1s
      i=$((i – 1))
      done
      echo ”
      echo ‘——————————————————————‘
      echo ‘- -‘
      echo ‘- 开始重启服务端 -‘
      echo ‘- -‘
      echo ‘——————————————————————‘
      done
      我开服的时候for循环不行我改成这样的了

  2. Zero
    2 年前
    2022-5-18 13:12:53

    XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true
    请问一下这些功能各有什么作用

    • 博主
      Zero
      2 年前
      2022-5-20 9:54:43

      优化参数

  3. AS
    2 年前
    2022-8-10 22:32:52

    root@as-terraria:/usr/MinecraftMod# ./start.sh
    JVM info: Private Build – 17.0.3 – 17.0.3+7-Ubuntu-0ubuntu0.20.04.1
    java.net.preferIPv4Stack=true
    Found java version 17.0.3
    Exception in thread “main”
    java.awt.HeadlessException:
    No X11 DISPLAY variable was set,
    but this program performed an operation which requires it.
    at java.desktop/java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:166)
    at java.desktop/java.awt.Window.(Window.java:553)
    at java.desktop/java.awt.Frame.(Frame.java:428)
    at java.desktop/java.awt.Frame.(Frame.java:393)
    at java.desktop/javax.swing.SwingUtilities$SharedOwnerFrame.(SwingUtilities.java:1919)
    at java.desktop/javax.swing.SwingUtilities.getSharedOwnerFrame(SwingUtilities.java:1995)
    at java.desktop/javax.swing.JOptionPane.getRootFrame(JOptionPane.java:1695)
    at java.desktop/javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:874)
    at java.desktop/javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:676)
    at java.desktop/javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:647)
    at net.minecraftforge.installer.SimpleInstaller.launchGui(SimpleInstaller.java:177)
    at net.minecraftforge.installer.SimpleInstaller.main(SimpleInstaller.java:147)
    root@as-terraria:/usr/MinecraftMod#
    这算是java版本过高吧,和上面的图不怎么一样啊

    • AS
      AS
      2 年前
      2022-8-10 22:34:17

      如果是,接下来就指定路径还是别的什么

    • 博主
      AS
      2 年前
      2022-8-13 22:29:29

      你应该把start.sh的内容发出来
      看内容你应该是在用安装器之类的东西
      如果你正在安装forge或者其他的东西,默认是需要桌面环境的,linux上需要gnome或者其他的桌面环境
      解决方式有两种
      1. 自己电脑上安装好之后打包传到linux上
      2. 查看安装器的使用指南(官网或者加-help之类的参数启动)
      3. 安装桌面环境

  4. itzcqwq
    9 月前
    2023-8-27 14:35:01

    start.sh: 18: start.sh: Syntax error: word unexpected (expecting “do”)

    • 博主
      itzcqwq
      9 月前
      2023-8-28 21:13:14

      while true后面加;

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇