Skip to content

功能特性 ​

进程托管 ​

  • 一个 bm2.toml 配置一个项目:单个应用,一个或多个独立实例,上限 1024。
  • 命令面:start、stop、remove、clean、kill、list、check、reload、notify、upgrade、version。
  • stop 停下但留在册,start 可恢复;remove 退役并交还名字,日志默认保留,-f 连状态目录一起清;clean 扫掉已经无主的历史目录。
  • kill 只管守护进程本身:无参时拒绝执行,加 -y 才杀掉全部应用并退出。
  • 优雅停止:SIGTERM 宽限期后 SIGKILL。每次 start 对其项目执行一次完整重启,所以改任何字段都在下一次 start 时生效。

监督与自愈 ​

  • 崩溃自动重启:异常退出按 restart_delay_ms 延迟重启,spawn 失败按次数递增退避。
  • 崩溃预算 max_restarts:连续异常重启超过预算即进入 errored,停止自愈等待人工介入,而不是无限重试。
  • 干净退出(超过 min_uptime_ms 的 code 0)不消耗崩溃预算。
  • 内存上限 max_memory_mb:超限按异常重启处理。

集群与负载均衡 ​

  • cluster 模式基于 SO_REUSEPORT:所有实例共享一个端口,内核分发,无中间层、无单点。
  • fork 模式使用连续端口,交给 Nginx、Caddy 之类的网关分发。
  • 启动后实测 reusePort 是否真的生效,缺失即停止整个项目并明确报错,而不是让第二个实例随机崩溃。

可靠性与状态 ​

  • pidfd 进程跟踪:守护进程崩溃后,新守护进程原地收养仍在运行的应用,应用无感继续运行。
  • 状态持久化:掉电或崩溃后实例状态既不丢也不残缺(原子写 + fsync)。
  • 本机 TCP + 共享令牌的控制通道,令牌常量时间比较,状态目录 0700。
  • CLI 与守护进程互相校验协议版本,版本不一致直接指路 bm2 reload。

日志 ​

  • 应用 stdout、stderr 与崩溃诊断三路分离,与 bm2 自身的管理日志严格分开。
  • 按大小轮转,[logs] 可按项目配置,默认 10 MB,代数不限。
  • 事件日志是 JSONL,只记管理元数据,不含环境变量值与协议载荷。

通知与上报 ​

  • 七平台预设:飞书、钉钉、企业微信、Slack、Discord、webhook、邮件。
  • 按项目独立配置,覆盖崩溃、预算耗尽、内存超限、reusePort 缺失、生命周期、阈值告警与定期体检。
  • 去重、限流、队列、退避重试内置,凭据零泄露。
  • 投递是独立任务,端点慢或挂都不占用监督心跳。

自升级 ​

  • bm2 upgrade 比对版本、下载并校验新二进制,然后换入新守护进程,应用继续运行。

它不管理什么 ​

Nginx、域名、证书、热重载、开机自启与远程管理都不在 bm2 的范围内。它是一个进程管理器,不是运维平台。