![这不起作用。为什么会这样?](https://linux22.com/image/228952/%E8%BF%99%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%E3%80%82%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BC%9A%E8%BF%99%E6%A0%B7%EF%BC%9F%20.png)
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 会话和目录树遍历的概念可能仍然有点不确定。)