跳到正文
本頁目錄

用命令管理伺服器

讀完本頁,你就能只用 lip 命令安裝一個 Minecraft 基岩版伺服器、給它裝上模組、啟動它、讓它在關掉終端機後繼續執行,以及停止它。這裡的每一件事在介面裡也都能做:見第一個伺服器。

開始之前

  • 先安裝 lip:見安裝。除此之外什麼都不用裝。遊戲、載入器以及它們需要的系統組件,都由 lip 下載。
  • 給伺服器選一個資料夾。lip 把它叫作工作區。每條命令都作用於你目前所在的資料夾,所以先 cd 進去。
Windows
mkdir D:\servers\survival
cd D:\servers\survival

安裝伺服器

執行 lip setup,並給出想要的遊戲版本:

sh
lip setup --game 1.26.50

把 1.26.50 換成你想要的版本。這條命令會往資料夾裡安裝三樣東西:

  • 遊戲:該版本的 Minecraft 基岩版專用伺服器(Bedrock Dedicated Server)。
  • 載入器:LeviLamina,負責把模組載入進遊戲。lip 會選用支援該遊戲版本的最新 LeviLamina。
  • 相依:LeviLamina 需要的套件。

完成後,lip 會輸出:

text
✓ The server is set up. Run it with 'lip run', or install mods with 'lip install'.

選擇組建和載入器

有三個選項可以改變安裝的內容。完整清單見 lip setup 頁面。

你想要執行
Windows 伺服器,配上適合它的最新 LeviLamina(預設)lip setup --game 1.26.50
指定的 LeviLamina 版本lip setup --game 1.26.50 --loader levilamina@<version>
不帶載入器的 Windows 伺服器,也就沒有模組lip setup --game 1.26.50 --no-loader
Linux 伺服器,它沒有載入器lip setup --game 1.26.50 --build linux

Windows 伺服器在 Linux 和 macOS 上也能執行,靠的是 Wine。哪種系統能執行什麼,見 Linux 與 macOS。

如果你不在意具體的遊戲版本,可以讓 LeviLamina 來決定。下面這條命令會安裝最新的 LeviLamina,以及它支援的最新遊戲:

sh
lip install LeviLamina

在已經有伺服器的資料夾裡,這同樣是一次伺服器安裝,可能會變更遊戲。見變更遊戲版本。

接受 Minecraft EULA

下載遊戲之前,lip 會列出遊戲所受約束的兩份檔案,並請你接受:

text
The Minecraft server is available under the Minecraft End User License Agreement (https://www.minecraft.net/eula) and the Microsoft Privacy Policy (https://go.microsoft.com/fwlink/?LinkId=521839). Read them before you go on.
Enter yes to accept the Minecraft EULA and the Privacy Policy:

輸入 yes(或 y)並按回車。其他任何回答都會中止命令,什麼都不會改變。

lip 不會記住你的回答。每次安裝遊戲時它都會再問一遍。

在指令碼、系統服務或容器裡,lip 沒法提問,安裝會失敗。如果你接受這兩份檔案,請用 --accept-eula 說明:

sh
lip setup --game 1.26.50 --accept-eula

先看看會做什麼

加上 --dry-run(或 -n),可以只看計劃、不做任何變更:

sh
lip setup --game 1.26.50 --dry-run

lip 會列出它將安裝或解除安裝的每個套件,說明它會詢問 EULA,最後輸出 Dry run: nothing was changed.。見試執行。

安裝模組

用 lip install 加上模組的名字來安裝:

sh
lip install LegacyScriptEngine#lua

lip 會安裝這個模組和它相依的一切。模組會放在工作區的 mods/<名字>/ 裡。

模組需要伺服器。在還沒有遊戲的資料夾裡,lip install 一個模組會失敗,並提示你先執行 lip setup。

管理套件一頁講了指定套件的各種寫法,以及如何更新、列出和解除安裝。

執行伺服器

用 lip run 啟動伺服器:

sh
lip run

lip 會啟動工作區安裝時確定的那個伺服器檔案:

工作區裡有lip 執行
載入器bedrock_server_mod.exe
沒有載入器,且是 Windows 伺服器bedrock_server.exe
沒有載入器,且是 Linux 伺服器bedrock_server(僅限 x64 的 Linux)

啟動 Windows 伺服器之前,如果系統缺少它需要的組件,lip 會先裝上:Microsoft Visual C++ Redistributable,以及在 Linux 和 macOS 上 lip 自帶的 Wine。在 Windows 上,系統可能會請你允許安裝程式執行。見 Linux 與 macOS。

使用主控台

伺服器的輸出會顯示在你的終端機裡。你輸入的內容會傳給伺服器,所以可以像平常一樣輸入伺服器命令:

text
list

停止伺服器

按 Ctrl+C。lip 會向伺服器輸入 stop,伺服器儲存世界後結束,然後 lip 結束。

再按一次 Ctrl+C 也不會強行切斷伺服器。lip 總是等伺服器自己結束。如果伺服器卡死了,請用系統自帶的工具結束它的處理程序。

關閉終端機視窗同樣會請伺服器停止。想讓它脫離終端機繼續執行,請使用託管伺服器。

結束代碼

lip run 以伺服器的結束代碼結束。在 Linux 和 macOS 上,如果伺服器被信號結束,結束代碼是 128 加上信號編號,例如 SIGKILL 對應 137。通過 Wine 執行時,它是 wine 的結束代碼。

只要伺服器執行過,無論結束代碼是多少,lip 都不會再輸出自己的錯誤,也不會寫失敗報告。指令碼可以檢查結束代碼:

Windows
lip run
if ($LASTEXITCODE -ne 0) { echo "The server failed with code $LASTEXITCODE" }

如果 lip 根本沒能啟動伺服器,它會說明原因,並以非零結束代碼結束。見伺服器無法啟動。

讓伺服器持續執行

普通的 lip run 屬於它所在的終端機:關掉終端機,伺服器就停了。託管伺服器則屬於 lip 的背景處理程序,也就是常駐程式。無論你的終端機發生什麼,它都繼續執行。

啟動

sh
lip run --managed

這會在常駐程式裡啟動伺服器,並把你的終端機接入它:你能看到它的輸出、輸入它的命令,和普通的 lip run 一樣。

想只啟動而不接入,加上 --detach。伺服器一啟動,命令就返回:

sh
lip run --managed --detach

回到伺服器

在同一個資料夾裡,從任意終端機再執行一次同樣的命令:

sh
lip run --managed

這個工作區已經有託管伺服器在執行,所以 lip 不會再啟動什麼,而是把你接入它。你會先看到伺服器在你到來之前輸出的一部分內容。可以同時有多個終端機接入。

離開但不停止

關閉終端機視窗或標籤頁。你的終端機會脫離,伺服器繼續執行。

WARNING

Ctrl+C 不是脫離。接入期間按 Ctrl+C 會請伺服器停止,和普通的 lip run 一樣。

停止

託管伺服器只有在有人要求時才會停止:

  • 從已接入的終端機:按 Ctrl+C,或輸入 stop。在伺服器結束之前,你的終端機一直保持接入。
  • 從介面:開啟該工作區的伺服器頁面,選擇「停止」。

除此之外沒有別的辦法讓它停下。有託管伺服器在執行時,lip daemon stop 會拒絕執行,常駐程式也不會自行結束。

需要知道的幾點

  • 介面用的就是託管伺服器。 你在伺服器頁面啟動的伺服器,和 lip run --managed 接入的是同一個託管伺服器。可以在一邊啟動,在另一邊檢視。
  • 每個工作區一個。 常駐程式在一個資料夾裡最多執行一個託管伺服器。
  • 它保留啟動時的環境。 伺服器的工作目錄和環境變數來自啟動它的那個終端機,而不是之後接入的終端機。
  • 它需要常駐程式。 如果 lip 用不了常駐程式,lip run --managed 會失敗,並提示你不帶 --managed 執行伺服器。見 lip 自己執行了命令。
  • 機器重新啟動後它不會回來。 常駐程式是你這個使用者的一個普通處理程序。lip 不會在系統啟動時啟動伺服器。需要這樣做時,請讓系統的服務管理器在工作區裡執行普通的 lip run。

帶 --managed 時,命令因 --detach 結束或因終端機脫離而結束,結束代碼是 0。如果伺服器在你接入期間停止,結束代碼就是伺服器的結束代碼,和普通的 lip run 一樣。

當機後自動重新啟動

預設情況下,伺服器結束後就保持停止。想讓 lip 在當機後重新啟動它,請為工作區開啟 restart:

sh
lip config set restart on-failure --workspace

此後,只要伺服器以非 0 的結束代碼結束,lip 就會等 5 秒再啟動它:

text
⚠ The server exited with code 1, and restart is on-failure: lip restarts it in 5 seconds (restart 1, at most 5 times within 10 minutes).
  • 以 0 結束的伺服器,或者你要求停止的伺服器,不會被重新啟動。
  • 在這 5 秒內按 Ctrl+C 會取消重新啟動。
  • 10 分鐘內重新啟動 5 次之後,lip 會捨棄並告訴你。請檢視伺服器的輸出,找出它反覆失敗的原因。
  • lip 在伺服器結束時才讀取這個設定。伺服器執行期間也可以修改它。

再關掉它:

sh
lip config set restart never --workspace

這個設定對普通伺服器和託管伺服器都有效,也就是介面裡的「自動重新啟動」開關。見設定。

一個工作區一個伺服器

一個工作區同一時間只執行一個伺服器。資料夾裡的伺服器在執行時,第二個 lip run 會立刻失敗:

text
error: A server of the workspace 'D:\servers\survival' is already running: another lip run, the interface of lip or the daemon of lip runs it, and holds the server lock 'D:\servers\survival\.lip\server.lock'. Stop that server first, or attach to it with 'lip run --managed' when it is a managed server.

要執行兩個伺服器,請給每個伺服器單獨的資料夾,並在各自的 server.properties 裡設定不同的連接埠。

變更遊戲版本

lip update 從不變更遊戲或載入器。lip install 只有在你點名 LeviLamina 或遊戲本身時才會變更,這時它就是一次伺服器安裝。遊戲出了新版本,或者某個模組需要別的版本時,請帶上想要的版本再執行一次 lip setup。先看一下計劃:

sh
lip setup --game 1.26.60 --dry-run
lip setup --game 1.26.60

做這件事之前請先停止伺服器。

lip 會針對新的遊戲和載入器重新安排模組:

  • 模組目前的版本能配合它們工作,就保持不變。否則換成能配合的版本。
  • 如果某個模組沒有任何能配合的版本,lip 會列出這些模組,並詢問是否解除安裝它們。回答 yes 繼續,其他回答則中止,什麼都不改。lip 沒法提問時(例如在指令碼裡),命令會失敗並列出它們;請先用 lip uninstall 自己解除安裝,再重新安裝伺服器。
  • 如果 lip setup 給出的遊戲和載入器與工作區現有的相同,就什麼都不會改,也不會詢問 EULA。

保留什麼刪除什麼

變更遊戲會刪除舊遊戲的檔案,寫入新遊戲的檔案。你自己的檔案會這樣處理:

檔案結果
server.properties、allowlist.json、permissions.json保留。 新遊戲不會覆寫它們。
worlds/,以及其他既不是 lip 安裝的、也不在下面清單裡的東西保留。 lip 不碰不是它安裝的檔案。
模組的資料夾 mods/<名字>/,連同其中的設定保留,除非該模組被解除安裝或更換版本。
behavior_packs/、resource_packs/、definitions/、config/、world_templates/、development_behavior_packs/、development_resource_packs/、development_skin_packs/連同裡面的所有內容一起刪除,再由新遊戲重新寫入。
valid_known_packs.json、packet-statistics.txt,以及 Windows 伺服器的 bedrock_server.exe.bak刪除。

WARNING

你自己複製到伺服器根目錄下 behavior_packs/ 或 resource_packs/ 裡的套件,會隨這些資料夾一起被刪除。請在別處留一份副本,或者把套件放在世界資料夾裡,也就是 worlds/ 之下。

解除安裝遊戲時適用同樣的規則。做大的改動之前,請先備份整個資料夾:安裝失敗時 lip 會復原自己的變更,但成功的安裝刪掉的東西,它沒法找回來。

伺服器執行時變更套件

伺服器執行期間,這些命令不會拒絕工作。你可以在另一個終端機、同一個資料夾裡執行 lip install、lip update、lip uninstall 和 lip setup。伺服器下次啟動時才會用上這些變更。

在 Windows 上,執行中的伺服器會一直開啟它的一些檔案。lip 需要取代或刪除這樣的檔案時,命令會失敗,lip 會復原已做的變更,工作區恢復原樣。請停止伺服器後再執行命令。見檔案被佔用。

restart 設為 on-failure 時還可能遇到一種情況。如果伺服器恰好在某條命令變更資料夾的那一刻當機,重新啟動時會發現資料夾正忙,lip run 會以另一個 lip 正在變更工作區裡的錯誤結束。重新啟動伺服器即可。

介面更嚴格:工作區的伺服器執行期間,介面不會變更那裡的套件。見介面與命令。

接下來