Super (superd):基于 Rust 的轻量级进程编排器实践
本文介绍基于 Rust 构建的 API 优先(API-First)轻量级进程编排器 Super(守护进程
superd+ 客户端super):涵盖一键安装脚本的工作机制、日常进程管理的常用 CLI 命令、SUPER_ROOT实例根目录的布局与解析顺序,以及通过systemctl查看 systemd 服务单元中环境变量的实用技巧,可作为替代 Supervisor、PM2 的进程托管方案参考。
工具简介
Super(MIT 协议)定位为 “The API-First, Lightweight Process Orchestrator for the Edge”,由两个静态编译的 Rust 二进制组成:
superd:守护进程,负责进程生命周期托管、健康检测、崩溃重启、日志汇聚,并对外暴露 REST API、WebSocket 与 Unix Socket;super:控制客户端,本身不直接拉起进程,而是superdHTTP API 的官方客户端。
它面向"只有几个常驻进程"的小型 VPS、边缘盒子、嵌入式设备与容器场景,目标是替代 Python Supervisor、PM2、Monit 等传统方案——不需要 Python 解释器或 Node.js/JVM 运行时,零外部依赖。
核心特性
以下特性均以官方文档为准:
- 单二进制 & 零运行时依赖:Rust 静态编译,极低内存与 CPU 开销;
- 全语言托管:可管理任意命令行程序(Node.js、Python、Go、Shell 等);
- 声明式配置:主配置为
$SUPER_ROOT/conf/super.toml(TOML),子服务通过[include].files加载conf/conf.d/*.toml栈文件,super reload热加载; - 健康检查探针:原生支持 TCP、HTTP(仅接受
http:///https://,状态码 200~299 视为成功)与 Exec 三类探针; - 弹性自愈:兼容 Supervisor 的
autorestart/exitcodes/startsecs语义;连续崩溃重启次数由retry_limit(默认 3 次)约束,超限后进程标记为Fatal并停用autostart;另有防抖机制(flapping_window默认 60 秒内最多flapping_threshold5 次重启); - API 优先:REST API + WebSocket 实时日志流,默认仅监听回环地址
127.0.0.1:9002;可选 Unix Socket(run/superd.sock,权限默认0600,配置为0666会被直接拒绝启动); - 事件持久化:全部生命周期事件(崩溃、退出、恢复、健康重启、cron 执行等)写入 SQLite(默认
data/events.db,WAL 模式),默认保留 30 天(events_keep_days),通过super events查询; - OTA 事务式更新:备份 → 校验 → 切换 → 健康窗口内不通过自动回滚;下载强制 HTTPS 并阻断云元数据地址;
- 平滑迁移:内置
super import supervisor可导入既有 Supervisor 配置并输出 diff 预览。
安装
官方提供一键安装脚本(内置 SHA-256 校验,自动创建目录并注册系统服务)。生产环境推荐先下载审计、再执行的两步安装方式:
# 1. 下载安装脚本并审计内容
curl -fsSL https://github.com/schiplat/super/releases/latest/download/install.sh -o install.sh
less install.sh
# 2. 审计无误后执行安装
sh install.sh[!WARNING] 上游 README 亦提供远程脚本直接管道执行的一行式安装。该方式会以当前用户权限直接执行远程脚本,虽然脚本内部对下载的发布包做了基于
SHA256SUMS的完整性校验,生产环境仍建议采用上述先审计后执行的方式,或从 Releases 手动下载对应平台(Linux x86_64/arm64、macOS、FreeBSD)的 tar.gz 包安装。
脚本默认行为:
- 安装
superd与super到$PREFIX/bin:root 或/usr/local/bin可写时为/usr/local/bin,普通用户则为~/.local/bin; - 创建实例根目录
SUPER_ROOT:系统级为/opt/super,用户级为~/.super,并写入最小布局(conf/、data/、logs/、run/、plugins/)与默认配置conf/super.toml; - 注册并启用开机自启服务:Linux 为 systemd(
superd.service),macOS 为 launchd(com.schiplat.superd),FreeBSD 为 rc.d。
脚本支持的常用选项:
| 选项 | 作用 |
|---|---|
--version | 安装指定版本 |
--prefix DIR | 自定义二进制安装前缀 |
--root DIR | 自定义 SUPER_ROOT 实例根目录 |
--user | 强制用户级安装(user systemd / LaunchAgent) |
--system | 强制系统级安装 |
--no-service | 跳过 systemd / launchd 服务注册 |
--no-start | 安装服务但不立即启动 |
--no-init | 不创建 SUPER_ROOT 目录布局与默认配置 |
日常进程管理
以下命令均已对照 CLI 源码(cli/src/args.rs)核实:
# 查看所有托管进程列表及状态
super list
# 添加并启动新服务(--autostart 为布尔开关,默认 true;其后为待托管命令)
super add --name api-server --autostart /opt/app/api
# 启动 / 停止 / 重启某服务
super start api-server
super stop api-server
super restart api-server
# 停止时等待进程真正退出(最多 10 秒,超时后 SIGKILL)
super stop api-server --wait --timeout 10
# 查看日志:先读取最近 50 行,再通过 WebSocket 持续跟随
super logs api-server --tail 50 -f
# 热加载配置(无参数时重载系统配置及 conf.d 栈文件)
super reload
# 离线校验配置文件(默认探测 ./conf/super.toml 或 /etc/super/super.toml)
super check
# 诊断本机安装与运行中的守护进程(配置、连通性等)
super doctor其他实用子命令:super events(查询 SQLite 历史事件)、super top(类 htop 实时监控)、super export(导出当前配置为栈文件)、super shutdown(停止守护进程)、super import supervisor <conf> --dry-run(预览 Supervisor 配置迁移)。
理解 SUPER_ROOT:实例根目录
SUPER_ROOT 是 Super 的实例根目录(Instance Root),用于存放配置、日志、运行时文件与数据,由 superd、super CLI 及授权插件共享,保证路径解析一致。所有相对路径(如 Unix Socket run/superd.sock、PID 文件 run/superd.pid、事件库 data/events.db、栈文件通配 conf/conf.d/*)均基于该目录解析。
守护进程的解析顺序(官方 environment-variables.md):
SUPER_ROOT环境变量(已设置且非空时优先);- 依据可执行文件位置推断(
<root>/bin/superd存在则取<root>); - 当前工作目录。
默认目录布局:
$SUPER_ROOT/
├── conf/
│ ├── super.toml # 主配置文件
│ └── conf.d/ # 子服务栈文件(TOML,兼容 JSON)
├── logs/ # 守护进程日志(app.log)与子进程输出
├── data/ # SQLite 事件库(events.db)与快照(snapshot.json)
├── run/ # Unix Socket(superd.sock)/ PID 文件(superd.pid)
└── plugins/ # 授权插件目录(.so / .dylib)通过 systemd 查看 SUPER_ROOT
系统级安装时,SUPER_ROOT 由 systemd 单元文件以 Environment= 注入。查看单元内容的命令为:
systemctl cat superd(服务全称为 superd.service,省略后缀效果相同。)
真实输出样例(系统级安装位于 /etc/systemd/system/superd.service,内容摘自 install.sh 生成的模板):
[Unit]
Description=Project Super Process Manager
Documentation=https://super.docs.sconts.com/docs/
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
# Must stay in the foreground. Do not set [server].daemon = true or pass --daemon.
ExecStart=/usr/local/bin/superd --foreground
Restart=on-failure
RestartSec=2
Environment="SUPER_ROOT=/opt/super"
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target几个值得注意的字段:
Type=simple+--foreground:单元模板明确要求守护进程保持前台运行,禁止配置[server].daemon = true或传入--daemon(systemd 场景下自守护化会干扰进程管理);Environment="SUPER_ROOT=/opt/super":实例根目录在此注入;用户级安装时单元位于~/.config/systemd/user/superd.service,SUPER_ROOT为~/.super,WantedBy相应变为default.target;Restart=on-failure+RestartSec=2:仅在异常退出时重启,间隔 2 秒。
实用衍生命令:
# 仅提取过滤 SUPER_ROOT 相关行
systemctl cat superd | grep -i "SUPER_ROOT"
# 查看正在运行中的 superd 实际加载的环境变量
systemctl show superd -p Environment
# 查看进程实际读取的当前环境(最旧的 superd 进程)
cat /proc/$(pgrep -o superd)/environ | tr '\0' '\n' | grep SUPER_ROOT与 Supervisor / systemd 的取舍
与 Python Supervisor 相比,Super 免去了 Python 运行时依赖,且原生提供 REST API、WebSocket 日志流、SQLite 事件历史与 OTA 更新;与 systemd 相比,它绕开了"动态增删服务需编写单元文件"的门槛,跨 Linux/macOS/FreeBSD 一致,并通过 import supervisor 降低迁移成本。对于已经深度使用 systemd 的主机,仅托管少数常驻进程的场景仍可直接使用 systemd;Super 更适合边缘设备、小规格 VPS 与需要编程接口管控进程的场合。该项目目前处于公测阶段,官方建议先在开发或 Staging 环境验证后再上生产。
参考
- GitHub 仓库:https://github.com/schiplat/super
- 官方文档站:https://super.docs.sconts.com/docs/
- 发现渠道(阮一峰科技爱好者周刊自荐):https://github.com/ruanyf/weekly/issues/11548
参考
- https://github.com/schiplat/super
- https://super.docs.sconts.com/docs/
- https://github.com/ruanyf/weekly/issues/11548
最近更新
相关文章
- systemd-networkd: Linux 网络管理服务详解
- systemd-run 运行临时命令
- timer 定时器
- systemd-timesyncd Linux 时间同步服务介绍
- systemd-cgtop 显示 cgroups 资源使用情况
- systemd-cgls 显示 cgroups 内容
- systemd-resolved: Linux DNS 解析服务介绍
- systemd-resolved、systemd-networkd、NetworkManager、netplan 的关系和联系
- systemd-journald/journalctl Linux 日志管理介绍
- systemd-sysctl 服务介绍
最新评论