因此,我花了大约一个月的时间在线搜索并弄清楚如何在 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”
我知道这篇文章已经过时了,但我希望它能帮助人们解决问题