如何让 Minecraft 服务器随系统启动?

如何让 Minecraft 服务器随系统启动?

我正在尝试弄清楚如何让我的 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

  1. 您的输出表明您没有设置 EULA 文件。运行一次服务器以生成文件(您已经这样做了)。

    然后编辑,eula.txt如上所示eula=true。然后服务器将启动。

  2. 大多数人在会话内启动服务器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. 补充 #1:您可以通过查看来检查服务器是否正在运行top。Java 应该正在消耗资源。如果没有,那么您的服务器已崩溃。

  2. 奖励#2:您可以查看 Minecraft 服务器的屏幕输出,logs/latest.log这是一种确认服务器确实在运行、世界已成功创建、人们可以加入等的简单方法。

相关内容