使用systemctl管理mc服务器

最近又重拾了这款游戏,和几个朋友一起联机玩。随即就发现很多教程并没有给出如何自动化管理服务端。

在网上查了一些资料后选择交由系统来完成所有工作,于是选用了原版服务端+Rcon+systemctl管理。

关于服务器如何搭建我就不在这里赘述了,基本都是同样的下载jar包、修改配置文件、映射端口。

服务 版本
Ubuntu 20.04
Minecraft Server 1.16.1
  • MC服务端放置在/opt/minecraft内

编译并启动MCRcon

解决依赖关系

1
sudo apt install git build-essential openjdk-8-jre-headless 

下载源码并编译:

1
2
git clone https://github.com/Tiiffi/mcrcon.git ; cd mcrcon/
make ; sudo make install

在server.properties修改如下行的参数:

1
2
3
rcon.port=25566
rcon.password=PASSWD
enable-rcon=true

不建议将Rcon端口映射至公网,建议防火墙禁止Rcon端口访问。

此时启动服务端后即可测试Rcon是否正常启动。

1
sudo mcrcon -H localhost -P 25566 -p PASSWD -t

创建systemctl配置文件

1
sudo vi /lib/systemd/system/mcser.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[Unit]
Description=Minecraft Server
Documentation=

Wants=network.target
After=network.target

[Service]
User=root
Group=root
KillMode=none
SuccessExitStatus=0 1

ProtectHome=true
ProtectSystem=full
PrivateDevices=true
NoNewPrivileges=true
PrivateTmp=true
ReadWriteDirectories=/opt/minecraft
WorkingDirectory=/opt/minecraft
ExecStart=/usr/bin/java -Xmx2048M -Xms4096M -jar minecraft_server.1.16.1.jar nogui
ExecStop=/usr/local/bin/mcrcon -H localhost -P 25566 -p PASSWD stop

[Install]
WantedBy=multi-user.target

启动服务

1
2
3
sudo systemctl daemon-reload
sudo systemctl start mcser
sudo systemctl enable mcser

服务端日志对接到journal中管理,使用journalctl即可管理

1
journalctl -u minecraft -f 

关于自动保存

虽然服务端有save-on命令可以完成自动保存,但是并没有给出如何指定保存时间或说明在什么情况下会触发保存(也可能是我没找到),所以暂时使用crontab定时保存

1
* 3 * * mcrcon -H localhost -P 25566 -p PASSWD save-all

关于防火墙

此处仅声明默认服务端口,不声明Rcon端口

1
sudo vi /etc/ufw/applications.d/minecraft
1
2
3
4
[Minecraft]
title=Minecraft Server
description=
ports=25565/tcp

如果你是第一次启动ufw防火墙,请放通SSH端口后再启用。避免因防火墙开启而阻断SSH链接

1
2
3
4
sudo ufw reload
sudo ufw allow OpenSSH
sudo ufw allow Minecraft
sudo ufw enable

参考文献