跳到正文
本頁目錄

lip run

運行工作區的服務器。

概要

shell
lip run [--managed [--detach]]

說明

不帶參數地運行工作區(當前目錄)根部的服務器,以工作區為工作目錄,並等待它退出。請先用 lip setup 設置服務器,例如 lip setup --game 1.21.0;參見運行服務器。

服務器是工作區的遊戲和加載器(參見 lip setup)所對應的文件:

工作區裝有服務器運行方式
LeviLaminabedrock_server_mod.exe在 Windows 上由 lip 運行,在其他系統上通過 Wine 運行
無加載器,Windows 版服務器bedrock_server.exe在 Windows 上由 lip 運行,在其他系統上通過 Wine 運行
無加載器,Linux 版服務器bedrock_server由 lip 運行,僅限 x64 的 Linux

lip 運行 Linux 版服務器時,若環境變量 LD_LIBRARY_PATH 未設置或為空,則將其設為 .,使服務器能找到其旁邊的庫。

啟動服務器之前,lip run 會:

  1. 若該工作區的服務器已在運行(由另一個 lip run、交互界面或 lip 的守護進程運行),立即失敗(每個工作區至多運行一個服務器,它在運行期間持有 .lip/server.lock);
  2. 若另一個 lip 命令(如 lip install)正在修改該工作區,立即失敗;
  3. 像 lip install 一樣,完成或撤銷被中斷的操作(參見內部機制);
  4. 若工作區沒有遊戲(此時提示使用 lip setup)、服務器是 Linux 版服務器而 lip 不在 x64 的 Linux 上運行,或服務器不是文件,則失敗;
  5. 對 Windows 版服務器 bedrock_server_mod.exe 和 bedrock_server.exe,安裝服務器需要而系統缺少的組件:Linux 和 macOS 上的 Wine,以及 Microsoft Visual C++ 可再發行組件包(參見系統依賴)。Linux 版服務器兩者都不需要。

服務器運行期間工作區不會被鎖定:你可以在另一個終端中對同一工作區運行 lip install、lip uninstall 和 lip update。它們的改動在服務器下次啟動時生效。交互界面在此期間不會執行它們:它也能看到由 lip run 啟動的服務器,並會請你先停止它。

Wine

當 lip 不在 Windows 上運行時,由於工作區環境的平臺是 win-x64,Windows 版服務器通過 Wine 運行:lip 運行它安裝在數據目錄中的 Wine 的 wine,從不運行在 PATH 中找到的,以服務器文件的絕對路徑為其唯一參數,並設置以下環境變量:

變量值
WINEPREFIX未設置或為空時:工作區中 .lip/wine 的絕對路徑。前綴不存在時由 Wine 創建。
WINEDEBUG未設置時:-all,即關閉 Wine 的調試輸出。

其他情況下,以及對 Linux 版服務器,lip 直接運行服務器。

輸入與輸出

服務器輸出到 lip 的終端,並讀取你輸入的內容:lip 從其標準輸入讀到的每個字節都會轉交給服務器,因此你可以像平常一樣輸入服務器命令。

停止

按 Ctrl+C(或向 lip 發送 SIGINT、SIGTERM 或 SIGHUP)即可停止服務器:第一次時,lip 向服務器輸入一行 stop,服務器隨即保存世界並退出。無論按多少次 Ctrl+C,lip 都要等服務器退出後才會退出;若服務器卡住,請結束其進程。

重啟

當工作區配置中 restart = "on-failure"(lip config set restart on-failure --workspace,參見 lip config)時,服務器以非零退出碼退出且你沒有要求它停止的話,lip 會重啟它:輸出一條消息,等待 5 秒,然後重新執行上述步驟並啟動服務器。10 分鐘內至多重啟 5 次;超過後 lip 輸出不再重啟的消息並退出。lip 在每次服務器退出時讀取 restart,因此你可以在服務器運行期間修改它。以退出碼 0 退出的服務器,或你要求停止的服務器,不會被重啟。

託管服務器

加上 --managed 時,服務器是託管服務器:由 lip 的守護進程運行,啟動它的終端關閉後它仍繼續運行,直到它退出或你停止它。守護進程為每個工作區至多運行一個託管服務器:

  • lip run --managed 啟動該工作區的託管服務器(或找到正在運行的那個),並連接(attach)到它:你能看到它的輸出,你輸入的內容會發給它。若服務器已在運行,你會先看到它最近輸出的一部分。
  • lip run --managed --detach 啟動它(或找到正在運行的那個)後立即以 0 退出。
  • 連接期間,Ctrl+C(SIGINT,或 Windows 上的 Ctrl+Break)如上所述要求服務器停止,你會保持連接直到它退出。關閉終端(SIGHUP,或在 Windows 上關閉控制台窗口)、SIGTERM 或結束 lip 進程則會斷開連接(detach):服務器繼續運行,再次運行 lip run --managed 即可重新連接。
  • 交互界面也顯示託管服務器並連接到它們:在其服務器頁面中啟動的服務器就是託管服務器。

託管服務器使用啟動它的 lip 的環境變量運行,其重啟規則同上。lip 不經守護進程自己執行命令時(例如守護進程無法啟動),lip run --managed 會失敗,因為只有守護進程運行託管服務器。不帶 --managed 使用 --detach 是用法錯誤。

退出狀態

服務器已啟動時,lip run 以最後運行的服務器的退出碼退出(通過 Wine 運行時為 wine 的退出碼);在 Windows 以外的系統上服務器被信號 n 結束時,以 128 + n 退出(例如 SIGKILL 為 137)。否則它以非零退出碼退出,並輸出原因。

lip run --managed 在你斷開連接或給出 --detach 時以 0 退出;在連接期間託管服務器停止運行時,以其 lip run 的退出碼退出,規則同上。

示例

shell
lip setup --game 1.21.0
lip run

在後臺運行服務器,失敗時自動重啟,稍後再連接到它:

shell
lip config set restart on-failure --workspace
lip run --managed --detach
lip run --managed