如何在 CentOS 8 上打开 Minecraft systemd 服务服务器控制台?

如何在 CentOS 8 上打开 Minecraft systemd 服务服务器控制台?

我对 Linux 还很陌生,因此这可能是一个愚蠢的问题,但无论如何:我在我的计算机上创建了一个 CentOS 8 虚拟机,为我和我的朋友运行 Minecraft 服务器本指南。因此,如果我理解正确的话,我为服务器创建了另一个 linux 用户,并且每次我打开机器电源时,服务器都会作为 systemd 服务启动。

服务器自动启动很方便,但有一个问题,我无法使用服务器控制台。使用我发现的控制台的唯一方法是使用该服务的屏幕会话,但由于我是 Linux 的新手,我不知道如何做到这一点(我需要向 minecraft.service 文件添加一些内容?)。我的minecraft.service 文件如下:

[Unit]
Description=Minecraft Server
After=network.target

[Service]
User=minecraft
Nice=1
KillMode=none
SuccessExitStatus=0 1
ProtectHome=true
ProtectSystem=full
PrivateDevices=true
NoNewPrivileges=true
WorkingDirectory=/opt/minecraft/server
ExecStart=/usr/bin/java -Xmx2048M -Xms1024M -jar server.jar nogui
ExecStop=/opt/minecraft/tools/mcrcon/mcrcon -H 127.0.0.1 -P 25575 -p mypassword stop

[Install]
WantedBy=multi-user.target

所以无论如何,我的问题是如何运行具有屏幕功能的服务器或者是否有更好的方法?

答案1

更改您的启动指令minecraft.service

ExecStart=/usr/bin/java -Xmx2048M -Xms1024M -jar server.jar nogui

到:

ExecStart=/usr/bin/screen -DmS minecraft-screen /usr/bin/java -Xmx2048M -Xms1024M -jar server.jar nogui

minecraft-screen只是屏幕的名称,您可以将其更改为您喜欢的任何名称。

答案2

首先,我个人并不托管《我的世界》服务器。我刚刚帮助我的一个朋友把他的服务器变成了 systemd 服务。

您需要在服务器的配置中启用 RCON(我猜您已经启用了),然后您可以在终端启动后使用 mcrcon 连接到服务器。

mcrcon -h <ip> -P <port> -t

这应该为您提供当您运行服务器而不是作为服务时通常会看到的实时终端(-t)。

自从您提到对 Linux 不熟悉以来,对您的用例进行了一些额外的说明:

命令 mcrcon 可能不在您的 PATH 变量中。因此,如果您去运行上面代码块中的语法,它可能会给您一个错误,指出没有找到这样的命令。如果是这种情况,为了保留服务文件的功能,您应该将 /opt/minecraft/tools/mcrcon/mcrcon (mcrcon 可执行文件的路径)符号链接到 PATH 中已有的位置,例如 /usr/垃圾桶

ln -s /opt/minecraft/tools/mcrcon/mcrcon /usr/bin/mcrcon

这将允许您从任何工作目录运行 mcrcon,而不必将目录更改为 /opt/minecraft/tools/mcrcon/ 并将其作为 ./mcrcon 运行或使用完整路径 /opt/minecraft/tools/mcrcon/mcrcon运行 mcrcon。

编辑

使用 RCON 时无法再看到的正常 STDOUT 日志消息仍应记录到 server.log 中,位于 minecraft 服务器目录内的日志子目录中。

答案3

您可以尝试添加

Type=oneshot
RemainAfterExit=yes

前往[服务]部分

在 CentOS 中,服务应放置在 /etc/systemd/system 中

因此,您应该在上述目录中创建一个文件minecraft_server.service,其中包含您在帖子中提供的内容。

[Unit]
Description=Minecraft Server
After=network.target

[Service]
User=minecraft
Nice=1
KillMode=none
SuccessExitStatus=0 1
ProtectHome=true
ProtectSystem=full
PrivateDevices=true
NoNewPrivileges=true
WorkingDirectory=/opt/minecraft/server
ExecStart=/usr/bin/java -Xmx2048M -Xms1024M -jar server.jar nogui
ExecStop=/opt/minecraft/tools/mcrcon/mcrcon -H 127.0.0.1 -P 25575 -p mypassword stop
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

然后执行命令:

sudo systemctl daemon-reload

添加新服务时需要它。

然后输入命令:

sudo systemctl start minecraft_server.service

如果您希望该服务在服务器启动期间启动,只需启用它:

sudo systemctl enable minecraft_server.service

Instaed start 您还可以使用 stop 和 restart 来停止或重新启动服务。

我没有玩过《我的世界》,也永远不会玩,我对它不熟悉。我只知道如何在 systemd 中添加服务。

该网站解释了如何使用 systemctl。 如何使用 Systemctl 管理 Systemd 服务和单元

相关内容