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