A lightweight Linux process manager for Bun and Node.js applications, written in MoonBit
curl -fsSL https://cli.moonbitlang.com/install/unix.sh | bash
moon install chensuiyi/bm2/...name = "api"
script = "src/index.ts"
instances = 2
port = 3000bm2 serve # 生产模式启动并登记
bm2 list # 看实例表
bm2 dev # 开发模式,单实例,前台跟随日志Bun.serve({
port: Number(Bun.env.BM2_APP_PORT),
reusePort: true,
fetch: () => new Response('ok'),
})| 命令 | 用途 |
|---|---|
| bm2 serve | 生产模式:登记、启动、写状态 |
| bm2 dev | 开发模式:单实例,前台跟随日志,--no-follow 可关闭跟随 |
| bm2 stop <name> | 停下,但保留登记,随时可以再起来 |
| bm2 remove <name> | 退役:停下、注销、交还名字,日志默认保留 |
| bm2 remove <name> -f | 退役并删除它的状态目录,连日志一起 |
| bm2 clean | 清掉状态目录里已经没有归属的旧目录,--dry-run 只看不删 |
| bm2 list [name] | 查看实例表,--json 给机器读 |
| bm2 check | 只校验当前目录的 bm2.toml,不碰守护进程 |
| bm2 reload | 换入新的守护进程,应用继续运行 |
| bm2 notify [target] | 给本项目的通知目标发一条测试消息 |
| bm2 upgrade | 用 moon install 换入新版本并让新守护进程接管 |
| bm2 kill -y | 停掉全部项目并退出守护进程 |
name = "api" # 项目名,也是状态目录下的目录名
cwd = "/srv/api" # 默认是 bm2.toml 所在目录
script = "src/index.ts" # 相对 cwd
runtime = "bun" # bun 或 node
exec_mode = "cluster" # cluster 或 fork
instances = 2
port = 3000
max_memory_mb = 512
max_restarts = 10 # 连续异常重启预算,0 表示首次异常即停止自愈
restart_delay_ms = 1000
min_uptime_ms = 10000
stop_timeout_ms = 10000
[logs]
max_size_mb = 10
keep = 0 # 0 表示归档代数不限
[notify]
enabled = false| 对比项 | bm2 | pm2 |
|---|---|---|
| 形态 | 两个原生静态二进制 | Node.js 应用 |
| 额外依赖 | 无 | 需要 Node.js |
| 空闲守护进程内存 | 约 2.6 MB | 约 50 MB |
| 日志轮转 | 内置 | 需装 pm2-logrotate |
| cluster 分发层 | 内核 SO_REUSEPORT,无中间层 | cluster master 进程 |
| 守护进程崩溃 | 应用继续运行,新守护进程接管 | cluster 应用随之中断 |
| 配置 | 静态 TOML,字段强校验 | ecosystem.config.js,可执行代码 |
| 环境变量 | 白名单 + 保留变量显式注入 | 继承调用方 shell 的完整环境 |
cd docs && bun install && bun run devInstall
Download zipA lightweight Linux process manager for Bun and Node.js applications, written in MoonBit