如何制作一个简单的 systemd minecraft 服务器启动服务

如何制作一个简单的 systemd minecraft 服务器启动服务

因此,我花了大约一个月的时间在线搜索并弄清楚如何在 Ubuntu 服务器启动后立即启动原始 Minecraft 服务器,但我无法使其工作。

在 Pentium G4560 上使用 Ubuntu Server 18.04LTS,配备 Intel 545s 512GB SSD 和 8GB RAM(它是我地下室里的一个物理盒子,所以如果出于某种原因需要直接访问)

简单来说,我有一个 Minecraft 服务器实例/home/petar/Minecraft和一个可以手动用来启动它的脚本/home/username/petar/run.sh,我发现你需要一个 systemd 服务来运行它,所以我制作了:sudo nano /etc/systemd/system/vanilla-mc.service它是这样的:

[Unit]
Description=mc-vanilla-startup-service

[Service]
ExecStart=/home/petar/minecraft/run.sh

[Install]
WantedBy=multi-user.target

然后我使用 sudo systemctl enable vanilla-mc.service 并重新启动了我的服务器,启动后我输入 systemctl status vanilla-mc.service 并得到:

vanilla-mc.service - mc-vanilla-startup-service
Loaded: loaded (/etc/systemd/system/vanilla-mc.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Thu 2019-02-14 17:28:06 CET; 2h 36min ago
Main PID: 969 (code=exited, status=1/FAILURE)

Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.

为什么它不起作用???

顺便说一下,这是./run.sh来自 minecraft 文件夹:`

#!/bin/sh
java -Xms1024M -Xmx3072M -jar server.jar -o true`

抱歉,由于某种原因我无法正确格式化

编辑(三年后和几门大学课程之后)

我需要指出的是,永远不要以 root 身份运行脚本。你应该做的是将服务修改为如下所示

注意你需要更改username为你真实的用户名

[Unit]
Description=app-service

[Service]
User=username
Restart=on-failure
ExecStart=/home/username/appdir/run.sh

[Install]
WantedBy=multi-user.target

这样,应用程序将以拥有关联文件的用户身份运行,同时也有助于防止任何不需要的命令以 root 身份执行(目前,使用 log4j2 进行日志记录的 Java 应用程序存在一个大问题,其中一个主题是 Minecraft)

看看自动重启选项,对于运行一些不太稳定的软件(例如修改过的 minecraft 服务器)非常有用

该脚本run.sh应该与我们尝试运行的应用程序文件位于同一目录中(在我们的例子中server.jar),它应该看起来像这样:

#!/bin/bash
cd /home/username/appdir
java -jar server.jar -Xmx4G

再次确保更改username为正确的系统用户

该脚本之前无法为服务运行的原因是由于缺少目录指令,基本上我们的服务无法找到我们试图运行的服务器应用程序

另外不要忘记通过运行使脚本可执行chmod u+x run.sh

现在你可以执行sudo systemctl enable servicename“sudo systemctl start servicename”

我知道这篇文章已经过时了,但我希望它能帮助人们解决问题

相关内容