lip run
運行工作區的服務器。
概要
lip run [--managed [--detach]]說明
不帶參數地運行工作區(當前目錄)根部的服務器,以工作區為工作目錄,並等待它退出。請先用 lip setup 設置服務器,例如 lip setup --game 1.21.0;參見運行服務器。
服務器是工作區的遊戲和加載器(參見 lip setup)所對應的文件:
| 工作區裝有 | 服務器 | 運行方式 |
|---|---|---|
| LeviLamina | bedrock_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 會:
- 若該工作區的服務器已在運行(由另一個
lip run、交互界面或 lip 的守護進程運行),立即失敗(每個工作區至多運行一個服務器,它在運行期間持有.lip/server.lock); - 若另一個 lip 命令(如
lip install)正在修改該工作區,立即失敗; - 像
lip install一樣,完成或撤銷被中斷的操作(參見內部機制); - 若工作區沒有遊戲(此時提示使用
lip setup)、服務器是 Linux 版服務器而 lip 不在 x64 的 Linux 上運行,或服務器不是文件,則失敗; - 對 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 的退出碼退出,規則同上。
示例
lip setup --game 1.21.0
lip run在後臺運行服務器,失敗時自動重啟,稍後再連接到它:
lip config set restart on-failure --workspace
lip run --managed --detach
lip run --managed