koishijs / koishi-desktop

Launch Koishi from your desktop
https://koishi.chat/manual/starter/
GNU Affero General Public License v3.0
89 stars 7 forks source link

Bug:对于无法启动的错误应该直接退出 #26

Closed shigma closed 2 years ago

shigma commented 2 years ago

目前的想法是 @koishijs/cli 中添加一个 --no-deamon 模式,然后根据进程间通信来判断是否启用。

Koishi 子进程启动完成后会发送一个 ready 事件给父进程,如果在此之前退出则不进行重启。

image

ilharp commented 2 years ago

--no-deamon 是指包 @koishijs/cli 不开启 daemon 功能吗?我认为 @koishijs/cli 的守护功能仍然是有必要的。在此之前,可以先简述一下 @koishijs/cli 守护的工作方式吗?

另,在之前的讨论中提出使用 ExitCode 的方式判断应当重启还是报错退出,现在为何又提出了新的守护方式?该方式有何优点?

shigma commented 2 years ago

@koishijs/cli 的守护模式如下:

shigma commented 2 years ago

我认为只需要有一套守护系统即可。

--no-deamon 的意思是,子进程依旧使用 config 中提供的配置启用 deamon 功能,但是并没有父进程了。父进程将由 koi 担任,完成与 @koishijs/cli 父进程相同的职责。

shigma commented 2 years ago

保留以 exit code 为判断标准的方式,但是对于启动完成前的退出特殊处理。这是因为启动完成前尚未接触到任何外界消息,此时的退出必然是可重现的,没有必要重启。

ilharp commented 2 years ago

我认为只需要有一套守护系统即可。

--no-deamon 的意思是,子进程依旧使用 config 中提供的配置启用 deamon 功能,但是并没有父进程了。父进程将由 koi 担任,完成与 @koishijs/cli 父进程相同的职责。

按照此方案,Koi 和 Koishi 中将会存在两份语言不同但逻辑相同的守护代码?我认为这是不合理的。


保留以 exit code 为判断标准的方式,但是对于启动完成前的退出特殊处理。这是因为启动完成前尚未接触到任何外界消息,此时的退出必然是可重现的,没有必要重启。

这是不正确的。我又进行了一次思考,然后我认为「可重现」的判定标准似乎相对灵活。考虑以下场景:

  1. 端口被占用。此时的退出 仅当端口仍然被占用时可重现。考虑某系统启动时先启动占用该端口的服务 A,后启动 Koi。而服务 A 可能占用端口几秒后就关闭了,此时的 Koi 不能重启显然是不正确的,相信你也同意。

  2. 配置文件有误。此时的退出 仅当配置仍然有误时可重现。但此时我们有以下考虑:「用户有能力修正配置,那么他必然有能力手动重启 Koi」,因此我们将其作为「退出而不重启」的典型场景。实际上该情况也并非必然可重现。

shigma commented 2 years ago

按照此方案,Koi 和 Koishi 中将会存在两份语言不同但逻辑相同的守护代码?我认为这是不合理的。

你现在的方案也是存在两份语言不同但部分逻辑相同的守护代码。我认为要么统一交给 CLI 要么就反过来。

ilharp commented 2 years ago

统一交由 @koishijs/cli 实现。

实现: 05b68241e656190d02efbe05dcc80147378217a9