![如何為具有 start.sh 檔案的 Minecraft 伺服器建立啟動服務?](https://rvso.com/image/1071725/%E5%A6%82%E4%BD%95%E7%82%BA%E5%85%B7%E6%9C%89%20start.sh%20%E6%AA%94%E6%A1%88%E7%9A%84%20Minecraft%20%E4%BC%BA%E6%9C%8D%E5%99%A8%E5%BB%BA%E7%AB%8B%E5%95%9F%E5%8B%95%E6%9C%8D%E5%8B%99%EF%BC%9F.png)
我在 Ubuntu 伺服器上安裝了一個經過修改的 FTB 伺服器,建立了一個名為「ftb」的使用者和群組,並為其提供了自己的目錄,/opt/ftb/
其中包含一個包含伺服器檔案的資料夾。在server資料夾中,有一個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
並刪除包含該「命令」的單行來刪除該「命令」。