A lightweight Linux process manager for Bun and Node.js applications, written in MoonBit
Dependencies
| 对比项 | bm2 | pm2 |
|---|---|---|
| 形态 | 原生静态二进制 | Node.js 应用 |
| 额外依赖 | 无 | Node.js 运行时 |
| 体积 | 约 5.5 MB(两个二进制) | 约 23 MB |
| 文件数量 | 2 个 | 3036 个 |
| 空闲守护进程内存 | 约 2.6 MB | 约 50 MB |
| 命令响应 | 约 1 ms | 约 200~400 ms |
| 日志轮转 | 内置,10 MB × 10 代 | 需额外安装 pm2-logrotate 模块 |
curl -fsSL https://cli.moonbitlang.com/install/unix.sh | bashmoon install chensuiyi/bm2/...bm2 upgrade # 比对版本、执行 moon install,并自动换入新守护进程# 项目名:字母开头,后接字母、数字和下划线。
# 同时也是应用名,在所有已注册项目中必须唯一。
name = "api"
# 应用工作目录(绝对路径),默认为 bm2.toml 所在目录。
cwd = "/srv/api"
# 相对 cwd 的脚本路径,禁止 .. 段。
script = "src/index.ts"
# 运行时:bun 或 node。
runtime = "bun"
# 实例数量(1..1024),端口从 port 起连续分配。
instances = 2
port = 3000
# 单实例内存上限(MiB),超过按异常重启处理,至少为 1。
max_memory_mb = 512
# 连续异常重启预算,0 表示首次异常即 errored。
max_restarts = 10
# 自动重启前的延迟(毫秒),崩溃后固定,spawn 失败后按次数递增。
restart_delay_ms = 1000
# 干净退出早于此时长(毫秒)会计入重启预算。
min_uptime_ms = 10000
# SIGTERM 到 SIGKILL 的宽限期(毫秒),最大 60000。
stop_timeout_ms = 10000const PORT = Number(process.env.BM2_APP_PORT ?? 3000);
const isPrimary = process.env.BM2_APP_INSTANCE === "0";
Bun.serve({ port: PORT, fetch: () => new Response("ok") });
if (isPrimary) {
// 只在主实例执行:数据库迁移、定时任务等
}bm2 start # 注册/更新当前目录中的项目并启动它
bm2 kill <name> # 停止一个项目并注销它;bm2d 继续运行
bm2 kill -y # 停止所有项目、注销它们并退出 bm2d(裸 `kill` 会拒绝执行)
bm2 list [name] # 显示所有已注册项目的状态
bm2 reload # 换入新的 bm2d;被管理的应用继续运行
bm2 upgrade # 把 bm2 升级到 mooncakes 上的最新版本
bm2 version # 显示 bm2 版本upstream bm2_app {
server 127.0.0.1:3000;
server 127.0.0.1:3001;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://bm2_app;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}example.com {
reverse_proxy 127.0.0.1:3000 127.0.0.1:3001
}bm2.sock # Unix socket,权限 0600
bm2d.pid # 守护进程 PID
bm2.events.jsonl # CLI 连接与重试事件
bm2d.log # 守护进程 stderr / 运行时诊断
bm2d.events.jsonl # 守护进程与监督事件
<name>/project.json # 每个项目的注册信息(配置路径)
<name>/<name>-<id>.json # 持久化的实例状态
<name>/logs/<name>-<id>.out.log # 应用 stdout
<name>/logs/<name>-<id>.error.log # 应用 stderr
<name>/logs/<name>-<id>.crash.log # 异常退出诊断tail -f ~/.bm2/bm2d.events.jsonl
jq -c . ~/.bm2/bm2d.events.jsonlInstall
Download zipA lightweight Linux process manager for Bun and Node.js applications, written in MoonBit
Dependencies