我正在尝试弄清楚如何让我的 Minecraft 服务器随我的系统一起启动。我目前使用的是 Ubuntu 21.04,内核 5.11,我的 DE 是 Gnome 3。我遵循这个帖子在 Ubuntu StackExchange 上在 systemd 中设置 Minecraft 服务,经过大量调整后我能够启动它,但是我收到 Java 错误,并且服务器说我需要接受 eula 即使我已经接受了。
以下是我的/etc/systemd/system/minecraft.service文件:
Description=Minecraft server
Wants=network.target
After=local-fs.target network.target
[Service]
User=minecraft
Group=minecraft
UMask=0027
EnvironmentFile=/etc/conf.d/minecraft
KillMode=none
SuccessExitStatus=0 1 255
NoNewPrivileges=true
PrivateDevices=true
PrivateTmp=true
ProtectHome=true
ProtectSystem=full
ExecStart=/usr/bin/java -Xms2G -Xmx3G -jar /etc/conf.d/Minecraft/server.jar --nogui
# ExecStop=/usr/bin/mcrcon -H localhost -p ${RCON_PASSWD} stop
[Install]
WantedBy=multi-user.target
我知道可以从中删除一些东西,比如 EnvironmentFile,因为我没有使用它,但我还没有完成对它的修剪。
现在,当我运行时,我的终端会显示以下内容sudo systemctl status minecraft.service:
Loaded: loaded (/etc/systemd/system/minecraft.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Wed 2021-05-12 21:25:55 EDT; 14min ago
Process: 5036 ExecStart=/usr/bin/java -Xms2G -Xmx3G -jar /etc/conf.d/Minecraft/server.jar --nogui (code=exited, status=0/SUCCESS)
Main PID: 5036 (code=exited, status=0/SUCCESS)
May 12 21:25:50 terrys-nas java[5036]: at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
May 12 21:25:50 terrys-nas java[5036]: at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
May 12 21:25:50 terrys-nas java[5036]: at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:551)
May 12 21:25:50 terrys-nas java[5036]: at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:537)
May 12 21:25:50 terrys-nas java[5036]: at net.minecraft.server.Main.<clinit>(SourceFile:57)
May 12 21:25:50 terrys-nas java[5036]: 2021-05-12 21:25:50,764 main ERROR Null object returned for RollingRandomAccessFile in Appenders.
May 12 21:25:50 terrys-nas java[5036]: 2021-05-12 21:25:50,773 main ERROR Unable to locate appender "File" for logger config "root"
May 12 21:25:55 terrys-nas java[5036]: [21:25:55] [main/ERROR]: Failed to store properties to file: server.properties
May 12 21:25:55 terrys-nas java[5036]: [21:25:55] [main/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
May 12 21:25:55 terrys-nas systemd[1]: minecraft.service: Succeeded.
我使用的 Java 版本是openjdk 版本“1.8.0_292”,如果我手动启动它,服务器就能正常运行。
我又尝试了一下,决定清除整个 Minecraft 目录,只保留 server.jar,希望它能为我重新创建文件,然后我就可以进入并编辑它们,但没有。目录中只有 server.jar。
如果您需要有关我的设置的任何其他信息,请告诉我,感谢您的时间。
答案1
您的输出表明您没有设置 EULA 文件。运行一次服务器以生成文件(您已经这样做了)。
然后编辑,
eula.txt
如上所示eula=true
。然后服务器将启动。大多数人在会话内启动服务器
screen
。这可让您更好地控制。这是我自己的
minecraft.service
文件,显示了服务器如何在screen
会话内启动,以及如何通过调用同一会话安全地停止。当然,您的 WorkingDirectory 和 User 以及服务器内存设置会有所不同。
[Unit]
Description=Minecraft Server
After=network.target
[Service]
RemainAfterExit=yes
WorkingDirectory=/home/minecraft
User=minecraft
# Start Screen, Java, and Minecraft
ExecStart=screen -s mc -d -m java -server -Xms512M -Xmx1024M -jar server.jar nogui
# Tell Minecraft to gracefully stop.
# Ending Minecraft will terminate Java
# systemd will kill Screen after the 10-second delay. No explicit kill for Screen needed
ExecStop=screen -p 0 -S mc -X eval 'stuff "say SERVER SHUTTING DOWN. Saving map..."\015'
ExecStop=screen -p 0 -S mc -X eval 'stuff "save-all"\015'
ExecStop=screen -p 0 -S mc -X eval 'stuff "stop"\015'
ExecStop=sleep 10
[Install]
WantedBy=multi-user.target
补充 #1:您可以通过查看来检查服务器是否正在运行
top
。Java 应该正在消耗资源。如果没有,那么您的服务器已崩溃。奖励#2:您可以查看 Minecraft 服务器的屏幕输出,
logs/latest.log
这是一种确认服务器确实在运行、世界已成功创建、人们可以加入等的简单方法。