Linux 用于启动和停止 minecraft 服务器的 systemd 服务文件

Linux systemd service file to start and stop a minecraft server

我正在尝试 运行 远程 linux 实例上的 Minecraft 服务器。

我希望实例在名为 serverscreen 的屏幕上启动服务器,一旦系统启动,该屏幕由名为 minecraft 的用户拥有,并且 运行 停止当实例关闭时向 serverscreen 命令。然后,它需要等到服务器停止后再真正关闭。

我是 linux 的新手,但我设法想出一些有用的命令,但我在尝试自动启动和停止服务器时遇到问题。

我已经尝试了很多东西,比如在启动时用 crontab -e @reboot script.sh 创建一个到 运行 的 .sh 脚本,或者用 #!/bin/sh sh script.shetc/rc.local 中创建一个文件,但这些方法似乎对我来说效果不佳。此外,不幸的是,它们不会 运行 关闭。因此,我认为最好使用以下命令创建一个名为 minecraft.service 的服务文件:

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

[Service]
User=minecraft
Nice=5
KillMode=none
SuccessExitStatus=0 1
InaccessibleDirectories=/root /sys /srv /media -/lost+found
NoNewPrivileges=true
WorkingDirectory=/opt/minecraft/server
ReadWriteDirectories=/opt/minecraft/server

#### Command to start the server.
ExecStart=sudo -u minecraft screen -dmS serverscreen java -Xms6G -Xmx6G -jar /opt/minecraft/server/forgeserver.jar nogui

#### Command to stop the server.
ExecStop=sudo -u minecraft screen -S serverscreen -p 0 -X eval "stuff stop^M"
##### Try to wait untill the server has stopped. I am not sure about this line of code since I haven't been able to test it properly.
ExecStop=/bin/bash -c "while ps -p $MAINPID > /dev/null; do /bin/sleep 1; done"

[Install]
WantedBy=multi-user.target

但是当 运行 这样做时,它给我一个错误,说我没有为某些东西提供绝对路径。

有人可以帮我设置一个服务文件,它将在名为 serverscreen 的屏幕上为用户 minecraft 和 运行 命令 stop 启动服务器服务器停止后实例关闭?

感谢@Riz,该服务现在可以使用 bash 脚本按预期运行,以便 运行 命令。