跳到正文
本页目录

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

另请参阅