我在 Ubuntu Server 上安装了一个经过修改的 FTB 服务器,创建了一个名为“ftb”的用户和组,并为其提供了自己的目录,/opt/ftb/
其中包含一个包含服务器文件的文件夹。在服务器文件夹中,有一个 start.sh 文件用于启动服务器。如何创建系统服务文件以便使用诸如 、 和 之类的命令systemctl status ftbacademy.service
。systemctl start ftbacademy.service
在systemctl stop ftbacademy.service
停止服务器时,我希望它保存然后关闭服务器。.service 文件是什么样子的?我知道它必须放在 中/etc/systemd/system/
,但我不知道如何编写文件,让 ftb 用户打开自己的虚拟终端或其他任何东西,以便能够拯救世界,然后停止服务器。
Ubuntu 服务器版本 20.04.3
FTB Academy 1.16 服务器文件下载站点:https://feed-the-beast.com/modpacks/88/server/2077我选择了 Linux 下载选项,然后运行安装文件以自动下载服务器文件。
我还使用不同版本的 JDK 来运行服务器文件,因此我将 start.sh 文件更改为:
#!/bin/bash
if ! grep -q "eula=true" eula.txt; then
echo "Do you agree to the Mojang EULA available at https://account.mojang.com/documents/minecraft_eula ?"
read -N 1 -p "[y/n] " EULA
if [ "$EULA" = "y" ]; then
echo "eula=true" > eula.txt
echo
fi
fi
/usr/lib/jvm/java-11-openjdk-amd64/bin/java -javaagent:log4jfix/Log4jPatcher-1.0.0.jar -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -Xmx5000M -Xms4000M -jar forge-1.16.5-36.2.2.jar nogui
答案1
[email protected]
我在位置创建了一个名为 的文件/etc/systemd/system/
。该文件包含以下内容:
[Unit]
Description=FTB Server: %i
After=network.target
[Service]
WorkingDirectory=/opt/ftb/%i
User=ftb
Group=ftb
Restart=always
ExecStart=/usr/bin/screen -DmS mc-%i bash start.sh
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say SERVER SHUTTING DOWN IN 15 SECONDS..."\015'
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say SERVER SHUTTING DOWN IN 10 SECONDS..."\015'
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say SERVER SHUTTING DOWN IN 5 SECONDS..."\015'
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "save-all"\015'
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "stop"\015'
[Install]
WantedBy=multi-user.target
然后我使用systemctl enable ftb@academy
和systemctl start ftb@academy
启用并启动服务器。我还意识到,当我最初创建 ftb 用户并授予其文件夹所有权时,我没有授予其子文件夹的权限,因此它被拒绝启动服务器的权限。
答案2
请注意脚本中 EULA 的 URL。它所做的只是询问您是否已阅读其条款,并询问您是否接受,但前提是尚未询问您并回答是。
因此,第一次运行后,它将只执行顶行和底行。
最简单的设置方法(从长远来看可以节省时间)是在最后一行添加命令的别名,该命令实际上配置并启动服务器文件。可以使用以下命令完成此操作:
MC_CMD='alias start_srvr="/usr/lib/jvm/java-11-openjdk-amd64/bin/java -javaagent:log4jfix/Log4jPatcher-1.0.0.jar -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -Xmx5000M -Xms4000M -jar forge-1.16.5-36.2.2.jar nogui"' && echo "${MC_CMD}" >> ~/.bash_aliases || echo "${MC_CMD}" >> ~/.bashrc
运行我上面添加的命令只是稍微方便了一点,所以您不必担心添加脚本,否则PATH
每次要启动服务器时都必须计算相对路径或输入完整路径。
如果您决定删除该服务器,您可以通过编辑~/.bash_aliases
并删除包含该命令的单行来删除该“命令”。