lip run
執行工作區的伺服器。
概要
lip run [--managed [--detach]] [-h | --help]說明
lip run 啟動工作區根目錄下的伺服器,不帶參數,並以工作區作為它的工作目錄。執行方式有兩種:
lip run | lip run --managed | |
|---|---|---|
| 伺服器執行在 | 這條命令之下:前臺執行。 | 常駐程式中,作為託管伺服器。 |
| 關閉終端機時 | lip 停止伺服器。 | 伺服器繼續執行。 |
| 命令結束於 | 伺服器結束之後。 | 你斷開連線時,或伺服器結束之後。帶 --detach 時立即結束。 |
| Ctrl+C | 停止伺服器。 | 停止伺服器。 |
無論用哪種方式啟動,一個工作區最多隻有一個伺服器在執行。
伺服器
伺服器是工作區根目錄下的一個檔案,由 lip setup 安裝的遊戲和載入器決定:
| 工作區有 | 伺服器 | 執行方式 |
|---|---|---|
| 載入器(LeviLamina) | bedrock_server_mod.exe | 在 Windows 上由 lip 執行;在 Linux 和 macOS 上通過 Wine 執行。 |
沒有載入器,組建為 windows | bedrock_server.exe | 同上。 |
沒有載入器,組建為 linux | bedrock_server | 由 lip 自己執行,只限 x64 的 Linux。 |
對 Linux 版伺服器,如果環境變數 LD_LIBRARY_PATH 未設定或為空,lip 把它設為 .,讓伺服器能找到它旁邊的庫。
通過 Wine 執行時,lip 使用它安裝在資料目錄中的 wine,絕不使用其他的;唯一的參數是伺服器檔案的絕對路徑,並設定:
| 變數 | 值 |
|---|---|
WINEPREFIX | 未設定或為空時:工作區中 .lip/wine 的絕對路徑。前綴不存在時由 Wine 建立。 |
WINEDEBUG | 未設定時:-all,關閉 Wine 的偵錯輸出。 |
參見 Linux 和 macOS。
啟動
不帶 --managed 時,lip run 依次:
- 取得伺服器鎖
.lip/server.lock。如果另一個處理程序持有它,說明該工作區已有伺服器在執行,命令失敗並說明這一點。 - 取得工作區鎖。如果另一個處理程序持有它,說明另一條命令正在變更工作區,命令失敗。
- 如果有操作被中斷,把它完成或復原。做不到時,命令失敗。
- 釋放工作區鎖。
- 工作區沒有遊戲時失敗(消息會提到
lip setup);伺服器是bedrock_server而 lip 沒有執行在 x64 的 Linux 上時失敗;伺服器檔案不存在時失敗。 - 對 Windows 版伺服器,安裝伺服器需要而系統缺少的組件:Linux 和 macOS 上的 Wine,以及 Microsoft Visual C++ 可再發行組件套件。安裝失敗時,命令失敗。
- 執行伺服器,並等待它結束。
- 伺服器被重新啟動時,回到第 2 步。
- 釋放伺服器鎖。
伺服器執行期間不持有工作區鎖,所以可以在另一個終端機裡對同一個工作區執行 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 依次:
- 如果 lip 沒有通過常駐程式、而是自己執行這條命令,命令失敗:只有常駐程式能執行託管伺服器。
- 如果該工作區沒有託管伺服器在執行,就啟動一個,並等待它的伺服器啟動。啟動失敗時,命令以同樣的方式失敗。
- 帶
--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 停止它:
lip run在背景啟動伺服器並立即返回:
lip run --managed --detach之後連線到它,檢視輸出並輸入命令:
lip run --managed伺服器當機時自動重新啟動:
lip config set restart on-failure --workspace
lip run --managed --detach另請參閱
- 用命令執行伺服器
- 伺服器:在介面中啟動、停止和檢視伺服器。
lip setup、lip daemon、lip config- Linux 和 macOS