跳到正文
本頁目錄

lip run

執行工作區的伺服器。

概要

text
lip run [--managed [--detach]] [-h | --help]

說明

lip run 啟動工作區根目錄下的伺服器,不帶參數,並以工作區作為它的工作目錄。執行方式有兩種:

lip runlip run --managed
伺服器執行在這條命令之下:前臺執行。常駐程式中,作為託管伺服器。
關閉終端機時lip 停止伺服器。伺服器繼續執行。
命令結束於伺服器結束之後。你斷開連線時,或伺服器結束之後。帶 --detach 時立即結束。
Ctrl+C停止伺服器。停止伺服器。

無論用哪種方式啟動,一個工作區最多隻有一個伺服器在執行。

伺服器

伺服器是工作區根目錄下的一個檔案,由 lip setup 安裝的遊戲和載入器決定:

工作區有伺服器執行方式
載入器(LeviLamina)bedrock_server_mod.exe在 Windows 上由 lip 執行;在 Linux 和 macOS 上通過 Wine 執行。
沒有載入器,組建為 windowsbedrock_server.exe同上。
沒有載入器,組建為 linuxbedrock_server由 lip 自己執行,只限 x64 的 Linux。

對 Linux 版伺服器,如果環境變數 LD_LIBRARY_PATH 未設定或為空,lip 把它設為 .,讓伺服器能找到它旁邊的庫。

通過 Wine 執行時,lip 使用它安裝在資料目錄中的 wine,絕不使用其他的;唯一的參數是伺服器檔案的絕對路徑,並設定:

變數值
WINEPREFIX未設定或為空時:工作區中 .lip/wine 的絕對路徑。前綴不存在時由 Wine 建立。
WINEDEBUG未設定時:-all,關閉 Wine 的偵錯輸出。

參見 Linux 和 macOS。

啟動

不帶 --managed 時,lip run 依次:

  1. 取得伺服器鎖 .lip/server.lock。如果另一個處理程序持有它,說明該工作區已有伺服器在執行,命令失敗並說明這一點。
  2. 取得工作區鎖。如果另一個處理程序持有它,說明另一條命令正在變更工作區,命令失敗。
  3. 如果有操作被中斷,把它完成或復原。做不到時,命令失敗。
  4. 釋放工作區鎖。
  5. 工作區沒有遊戲時失敗(消息會提到 lip setup);伺服器是 bedrock_server 而 lip 沒有執行在 x64 的 Linux 上時失敗;伺服器檔案不存在時失敗。
  6. 對 Windows 版伺服器,安裝伺服器需要而系統缺少的組件:Linux 和 macOS 上的 Wine,以及 Microsoft Visual C++ 可再發行組件套件。安裝失敗時,命令失敗。
  7. 執行伺服器,並等待它結束。
  8. 伺服器被重新啟動時,回到第 2 步。
  9. 釋放伺服器鎖。

伺服器執行期間不持有工作區鎖,所以可以在另一個終端機裡對同一個工作區執行 lip install、lip uninstall 和 lip update。它們的變更在伺服器下次啟動時生效。介面在伺服器執行時不執行這些操作,而是要求你先停止伺服器。

輸入與輸出

伺服器向 lip 的標準輸出和標準錯誤寫入,並讀取 lip 從標準輸入讀到的內容:像平時一樣輸入伺服器命令即可。lip 的輸入結束時,伺服器的輸入並不結束。被重新啟動的伺服器讀取的是上一個伺服器結束之後的輸入。

停止

按 Ctrl+C、傳送信號 SIGINT、SIGTERM 或 SIGHUP,以及在 Windows 上的任何主控台控制信號(例如關閉主控台視窗),都是要求 lip 停止。

第一次被要求停止時,lip 向伺服器傳送一行 stop,伺服器隨即儲存世界並結束。如果在伺服器啟動之前就被要求停止,伺服器會在啟動後收到這一行。無論被要求多少次,lip 都不會先於伺服器結束。伺服器卡住時,請自己結束伺服器處理程序。

重新啟動

滿足以下全部條件時,伺服器會被重新啟動:

  • 它以非 0 的結束代碼結束;
  • lip 沒有被要求停止;並且
  • 伺服器結束的那一刻,工作區設定中的 restart 是 on-failure。

此時 lip 寫一條消息,等待 5 秒,然後從第 2 步開始再次啟動伺服器。在等待期間要求 lip 停止,會取消這次重新啟動。

伺服器在 10 分鐘內最多被重新啟動 5 次。之後它再次結束時,lip 會寫明不再重新啟動,然後結束。

託管伺服器

託管伺服器是常駐程式執行的、不屬於任何特定客戶端的伺服器。它按上面的方式執行,使用啟動它的那個 lip 的工作目錄和環境變數,但有這些不同:

  • 無論啟動它的客戶端發生什麼,它都繼續執行。
  • 它的輸入來自連線到它的客戶端和介面。它的輸出會發給所有這些客戶端和介面。
  • 只有連線著的客戶端或介面才能要求它停止。

常駐程式為每個工作區最多執行一個託管伺服器。在介面的伺服器頁啟動的伺服器也是託管伺服器,你可以從終端機連線到它。

帶 --managed 時,lip run 依次:

  1. 如果 lip 沒有通過常駐程式、而是自己執行這條命令,命令失敗:只有常駐程式能執行託管伺服器。
  2. 如果該工作區沒有託管伺服器在執行,就啟動一個,並等待它的伺服器啟動。啟動失敗時,命令以同樣的方式失敗。
  3. 帶 --detach 時,命令結束。否則客戶端連線到它。

連線

連線到託管伺服器期間:

  • 你輸入的內容會發給伺服器。你的標準輸入結束並不會斷開連線。
  • 伺服器的輸出,以及 lip 關於它的消息,會寫到你的終端機。如果伺服器之前就在執行,你可能先看到它此前輸出的一部分。
  • Ctrl+C(SIGINT;在 Windows 上還有 Ctrl+Break)要求伺服器停止。你會保持連線,直到它結束。
  • 關閉終端機(SIGHUP)、SIGTERM、Windows 上的其他主控台控制信號,以及結束 lip 處理程序,都會斷開連線:命令結束,伺服器繼續執行。

連線期間託管伺服器停止執行時,命令結束。

想讓託管伺服器繼續執行,關閉終端機或終端機標籤頁即可。要重新連線,在該工作區中再次執行 lip run --managed。

選項

選項說明
--managed把伺服器作為託管伺服器執行,或連線到正在執行的那個。
--detach與 --managed 一起使用:不連線。不帶 --managed 時是用法錯誤。
-h、--help輸出幫助並結束。

輸出

lip run 自己沒有結果。標準輸出和標準錯誤上是伺服器寫到那裡的內容。lip 的消息(例如重新啟動之前的那條)寫到標準錯誤。

結束狀態

不帶 --managed 時:

情況結束代碼
伺服器已啟動最後執行的那個伺服器的結束代碼;通過 Wine 執行時是 wine 的結束代碼。在 Linux 和 macOS 上,被信號 n 結束時為 128 + n,例如 SIGKILL 為 137。lip 不另寫消息。
伺服器未啟動非 0,並有消息說明原因。

帶 --managed 時:

情況結束代碼
帶 --detach,或你斷開了連線0
連線期間伺服器停止執行託管伺服器的 lip run 的結束代碼,同上表。
託管伺服器無法啟動非 0,並有消息說明原因。

示例

在前臺執行伺服器。按 Ctrl+C 停止它:

shell
lip run

在背景啟動伺服器並立即返回:

shell
lip run --managed --detach

之後連線到它,檢視輸出並輸入命令:

shell
lip run --managed

伺服器當機時自動重新啟動:

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

另請參閱