这不起作用。为什么会这样?

这不起作用。为什么会这样?
study071126@minecraft:~$ cd ~/minecraft/ && sh ./run.sh nogui
Error occurred during initialization of VM
Too small maximum heap
study071126@minecraft:~/minecraft$ ls
config          forge-1.20.1-47.2.0-installer.jar      logs     run.sh
defaultconfigs  forge-1.20.1-47.2.0-installer.jar.log  mods     user_jvm_args.txt
eula.txt        libraries                              run.bat
study071126@minecraft:~/minecraft$ java -Xms10G -Xmx14G -jar ^C
study071126@minecraft:~/minecraft$ java -Xms10G -Xmx14G -jar forge-1.20.1-47.2.0-installer.jar --nogui
JVM info: Private Build - 18.0.2-ea - 18.0.2-ea+9-Ubuntu-222.04
java.net.preferIPv4Stack=true
Current Time: 07/02/2024 01:44:54
Exception in thread "main"
joptsimple.UnrecognizedOptionException: nogui is not a recognized option
        at joptsimple.OptionException.unrecognizedOption(OptionException.java:108)
        at joptsimple.OptionParser.handleLongOptionToken(OptionParser.java:510)
        at joptsimple.OptionParserState$2.handleArgument(OptionParserState.java:56)
        at joptsimple.OptionParser.parse(OptionParser.java:396)
        at net.minecraftforge.installer.SimpleInstaller.main(SimpleInstaller.java:93)
study071126@minecraft:~/minecraft$ ^C
study071126@minecraft:~/minecraft$ cd ~/minecraft/ && sh ./run.sh nogui
Error occurred during initialization of VM
Too small maximum heap
study071126@minecraft:~/minecraft$ ^C
study071126@minecraft:~/minecraft$ ^C
study071126@minecraft:~/minecraft$ sudo java -Xmx9218m -Xms2048m -jar forge-1.20.1-47.2.0-installer.jar --noguiJVM info: Private Build - 18.0.2-ea - 18.0.2-ea+9-Ubuntu-222.04
java.net.preferIPv4Stack=true
Current Time: 07/02/2024 01:47:35
Exception in thread "main"
joptsimple.UnrecognizedOptionException: nogui is not a recognized option
        at joptsimple.OptionException.unrecognizedOption(OptionException.java:108)
        at joptsimple.OptionParser.handleLongOptionToken(OptionParser.java:510)
        at joptsimple.OptionParserState$2.handleArgument(OptionParserState.java:56)
        at joptsimple.OptionParser.parse(OptionParser.java:396)
        at net.minecraftforge.installer.SimpleInstaller.main(SimpleInstaller.java:93)
study071126@minecraft:~/minecraft$ ^C
study071126@minecraft:~/minecraft$ cd ~/minecraft/ && sh ./run.sh nogui
Error occurred during initialization of VM
Too small maximum heap
study071126@minecraft:~/minecraft$ cd ~/minecraft/ && sh ./run.sh nogui
Error occurred during initialization of VM
Too small maximum heap
study071126@minecraft:~/minecraft$ sudo java -Xmx2048m -Xms9218m -jar forge-1.20.1-47.2.0-installer.jar --noguiError occurred during initialization of VM
Initial heap size set to a larger value than the maximum heap size
study071126@minecraft:~/minecraft$ sudo java -Xmx2048m -Xms9218m -jar forge-1.20.1-47.2.0-installer.jar --noguiError occurred during initialization of VM
Initial heap size set to a larger value than the maximum heap size
study071126@minecraft:~/minecraft$ sudo java -Xmx2048m -Xms2048m -jar -jar forge-1.20.1-47.2.0-installer.jar --nogui
JVM info: Private Build - 18.0.2-ea - 18.0.2-ea+9-Ubuntu-222.04
java.net.preferIPv4Stack=true
Current Time: 07/02/2024 01:48:42
Exception in thread "main"
joptsimple.UnrecognizedOptionException: nogui is not a recognized option
        at joptsimple.OptionException.unrecognizedOption(OptionException.java:108)
        at joptsimple.OptionParser.handleLongOptionToken(OptionParser.java:510)
        at joptsimple.OptionParserState$2.handleArgument(OptionParserState.java:56)
        at joptsimple.OptionParser.parse(OptionParser.java:396)
        at net.minecraftforge.installer.SimpleInstaller.main(SimpleInstaller.java:93)
study071126@minecraft:~/minecraft$ cd ~/minecraft/ && sh ./run.sh nogui                                        Error occurred during initialization of VM
study071126@minecraft:~/minecraft$ ^C
study071126@minecraft:~/minecraft$ sh ./run.sh
Error occurred during initialization of VM
Too small maximum heap
study071126@minecraft:~/minecraft$ 

答案1

因为你做得不对。

如果您想要更具体的答案,请正确定义“它”和“工作”。

更具体地说(尽管是推测性的),您似乎正在尝试启动经过修改的 Minecraft 服务器。请参阅该模组的安装和启动说明。另请参阅您收到的错误消息。检查您正在使用的脚本以确保它正在运行项目文档中指定的命令。

您得到的一些输出及其含义——同样取决于您遇到问题的应用程序的规范:

Error occurred during initialization of VM
Too small maximum heap

您正在启动的应用程序请求的内存分配多于调用它的 JVM 允许的内存分配。

Exception in thread "main"
joptsimple.UnrecognizedOptionException: nogui is not a recognized option

nogui您提供了应用程序无法识别的运行时选项 ( )。请参阅应用程序的文档。

作为(进一步)旁白:如果任何人正在告诉你运行一个游戏服务器以 开头的命令sudo停止听从那个人的任何指示,因为他们很穷,可能是不正确的,并且充满各种危险。

答案2

请注意,这forge-1.20.1-47.2.0-installer.jar不是实际的 Minecraft 服务器,而是安装人员为了它。看起来您已经执行过一次,无需再次运行。

请注意,有一个名为user_jvm_args.txt.它是一个文本文件。如果你查看它(例如使用less ~/minecraft/user_jvm_args.txt),你会看到类似这样的内容:

# Xmx and Xms set the maximum and minimum RAM usage, respectively.
# They can take any number, followed by an M or a G.
# M means Megabyte, G means Gigabyte.
# For example, to set the maximum to 3GB: -Xmx3G
# To set the minimum to 2.5GB: -Xms2500M
 
# A good default for a modded server is 4GB.
# Uncomment the next line to set it.
# -Xmx4G

您可以在此处添加 Java 内存参数。您可以删除#最后一行中的符号并在其中添加选项,或者只是在末尾添加一个新行并包含您的内存选项:

echo "-Xms10G -Xmx14G" >> ~/minecraft/user_jvm_args.txt

(此命令行应该只运行一次:如果您想随后更改选项,您应该使用常规文本编辑器以避免向文件添加越来越多的行。)

之后,cd ~/minecraft/ && sh ./run.sh nogui应该可以工作。

run.sh是一个shell脚本,所以它也是一个文本文件。通常,当程序附带用于启动它的脚本时,这表明该脚本是任何参数和其他自定义的预期位置,因此在运行脚本之前阅读脚本是一个好主意。less ~/minecraft/run.sh将是查看其内容的一种方式。

在这种情况下,您会看到类似这样的内容:

#!/usr/bin/env sh
# Forge requires a configured set of both JVM and program arguments.
# Add custom JVM arguments to the user_jvm_args.txt
# Add custom program arguments {such as nogui} to this file in the next line before the "$@" or
#  pass them to this script directly
java @user_jvm_args.txt @libraries/net/minecraftforge/forge/1.20.2-48.1.0/unix_args.txt "$@"

如果你想总是使用参数运行服务器nogui,这会告诉您要做什么。只需将其添加nogui到最后一行,就变成:

java @user_jvm_args.txt @libraries/net/minecraftforge/forge/1.20.2-48.1.0/unix_args.txt nogui "$@"

之后,cd ~/minecraft/ && sh ./run.sh就足以以该nogui模式启动服务器。

正如 DopeGhoti 在他们的回答中所说,你应该绝不使用 运行游戏服务器sudo。游戏服务器非常复杂,几乎肯定会包含一些尚未广为人知的漏洞,如果您以 root 权限运行游戏服务器,任何利用此类漏洞的人都将立即完全控制您的系统。

虽然作为普通用户被黑客攻击已经够糟糕的了(如今,这通常意味着你的云服务器将被用来为入侵者挖掘比特币,而你则需要支付账单),但让入侵者能够轻松获得 root 访问权限则更糟糕:从中恢复的唯一可靠方法是删除云服务器并创建一个新服务器。

(我cd在这个答案中故意使用了绝对路径和无关的命令;我假设提问者是一个新手,他的命令行技能甚至单独的 shell 会话和目录树遍历的概念可能仍然有点不确定。)

相关内容