use*_*825 5 service ubuntu-18.04
我已经设置了一个 Ubuntu 18.04 实例,用作私有 Minecraft Bedrock 服务器。
我已经从https://www.minecraft.net/en-us/download/server/bedrock/下载了服务器本身
我可以直接从 shell 运行它,一切正常。然而,我想做的是将其配置为服务,这样它将在启动时自动启动,并优雅地停止等。
“bedrock_server”可执行文件在前台运行,并等待来自标准输入的各种命令,例如“stop”、“kick”、“save”等。
有没有一种方法可以配置服务脚本,以便可以像这样控制它......
$ service minecraft stop
$ service minecraft restart
Run Code Online (Sandbox Code Playgroud)
如果我还可以发出其他特定于《我的世界》的命令,那就更好了,例如......
$ service minecraft kick [player name or xuid]
Run Code Online (Sandbox Code Playgroud)
ETC。
不过我不太关心这种能力。我想要的主要事情是能够在服务器启动时正确启动它,并优雅地停止。
我不需要为我完整地写下它。如果有人可以指导我查看教程、模板或其他东西,那就太好了。
这是我当前用来从 shell 启动它的完整命令......
$ cd /home/[my-user]/bedrock-server-1.14.60.5 && LD_LIBRARY_PATH=. ./bedrock_server
Run Code Online (Sandbox Code Playgroud)
更新...
根据下面的答案以及大量的试验和错误,我想出了这个 systemd 脚本......
[Unit]
Description=Minecraft Bedrock Service
After=network-online.target
[Service]
User=[my-user]
WorkingDirectory=/home/[my-user]/bedrock-server-1.14.60.5
Type=forking
ExecStart=/usr/bin/screen -dmS UbuntuMinecraft /bin/bash -c "LD_LIBRARY_PATH=. ./bedrock_server"
ExecStop=/usr/bin/screen -Rd UbuntuMinecraft -X stuff "say Stopping server in 10 seconds...\r"
ExecStop=/bin/sleep 10
ExecStop=/usr/bin/screen -Rd UbuntuMinecraft -X stuff "stop\r"
GuessMainPID=no
TimeoutStartSec=600
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
这看起来效果很好。
如果我需要在服务器上运行其他命令,我可以像这样连接到屏幕会话......
$ screen -R UbuntuMinecraft
Run Code Online (Sandbox Code Playgroud)
然后我可以运行我需要的任何本机命令。
我的解决方案部分基于此代码... https://github.com/TheRemote/MinecraftBedrockServer
初始化脚本根据您使用的发行版版本而有所不同,但我相信大多数现代版本的 Ubuntu 都使用 systemd。那么您可能想要一个Systemd 文件。
Systemd 文件遵循标准格式,您主要必须在其中替换正确的值。
我还没有对此进行测试,但是按照标准语法,您需要以下内容:
[Unit]
Description=Minecraft Service
After=network.target
[Service]
Type=Simple
WorkingDirectory=/home/user/bedrock-server-1.14.60.5
ExecStart=/bin/sh -c "LD_LIBRARY_PATH=. ./bedrock_server"
Restart=on-failure
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
您可以在此处配置不同的内容,例如,TimeoutStopSec您可以配置当您运行“stop”命令时,服务在终止进程之前要关闭的时间。
如果您将该文件放入您的发行版的正确文件夹(/etc/systemd/system)中,您将能够使用 systemctl 或 service 命令来控制该服务。
如果您创建了名为“minecraft”的服务,您将能够使用如下命令:
systemctl status minecraft- 获取当前状态
systemctl starts minecraft- 启动服务
systemctl stop minecraft- 停止服务
systemctl enable minecraft- 启动时启动该服务
至于能否运行控制台命令,取决于服务的处理方式。当我过去运行 Java Minecraft 服务器时,您可以使用“RCON”将命令发送到控制台,但还有其他技巧,例如绑定到套接字。
我无法保证这段代码的安全性,但快速谷歌暗示有人已经为此类功能创建了正确的套接字包装器: https: //github.com/TapeWerm/MCscripts
另一种选择是在屏幕会话中启动 Minecraft,这将允许您随意重新连接到正在运行的控制台。
| 归档时间: |
|
| 查看次数: |
7114 次 |
| 最近记录: |