2 个版本
0.0.2 | 2024年1月4日 |
---|---|
0.0.1 | 2024年1月4日 |
#1854 在 命令行工具
130KB
2.5K SLoC
𝐤𝐮𝐫𝐯 是一个进程管理器,主要用于 Node.js 和 Python 应用程序。它使用 Rust
编写。它可以将您的应用程序守护进程化,以便它们可以在后台运行。如果它们崩溃,它也会重新启动它们。
[!WARNING]
注意,这个项目是我的 Rust 学习游乐场,还不是生产就绪的
- 我构建这个项目是因为我的应用程序需要一个进程管理器,同时我也想学习 Rust。所以,这就是它……我的第一个 Rust 项目!
- 还没有测试(哦!)
- 仅在 Windows 11 上进行测试
- Rust 新手警告!🚨
- 我正在用我的项目使用它,但不是大规模使用
为什么是 𝐤𝐮𝐫𝐯?
那么,为什么叫 𝐤𝐮𝐫𝐯?嗯,它在许多我不说的语言中意味着“篮子”,比如挪威语(但它听起来很酷 😄)。将 𝐤𝐮𝐫𝐯 视为您的应用程序的篮子。在 kurv 中,我们称每个部署的应用程序为 egg
。所以,让我们去收集一些篮子里的鸡蛋 🥚。
安装
[!NOTE] 𝐤𝐮𝐫𝐯 可以作为服务器或 CLI 客户端运行,使用相同的二进制文件。
服务器负责管理鸡蛋,而客户端用于与服务器交互,告诉它要做什么或请求信息。
下载二进制文件
从 GitHub 下载最新版本 这里。
crates.io
您也可以使用 cargo
从 crates.io 安装它
cargo install kurv
使用方法
启动服务器
要启动服务器,请输入
kurv server
[!IMPORTANT]
𝐤𝐮𝐫𝐯 将创建一个名为
.kurv
的文件,其中将存储服务器的当前状态。该文件将位于二进制文件所在的同一目录中或由KURV_HOME_KEY
环境变量指定的路径中。由于 𝐊𝐮𝐫𝐯 可以同时作为服务器和客户端使用,如果你想要将其作为服务器运行,你需要将环境变量
KURV_SERVER
设置为true
。这仅仅是一个安全措施,以防止你在实际想要运行客户端时运行服务器。为了绕过这个限制,你可以使用--force
标志(kurv server --force
)。
收集一些 🥚
要部署/启动/守护一个应用(收集一个蛋),请执行
kurv collect <egg-cfg-path>
路径应该指向一个包含蛋配置的 YAML 文件。
它可能看起来像这样
name: fastapi # the name of the egg / should be unique
command: poetry # the command/program to run
args: # the arguments to pass to the command
- run
- serve
cwd: /home/user/my-fastapi-app # the working directory in which the command will be run
env: # the environment variables to pass to the command
FASTAPI_PORT: 8080
这将运行命令 poetry run serve
,在 /home/user/my-fastapi-app
,并将环境变量 FASTAPI_PORT
设置为 8080
。
如果由于某些原因,命令/程序崩溃或退出,𝐊𝐮𝐫𝐯 将会重新启动它!
显示我的蛋
如果你想要查看你蛋的当前状态摘要,运行
$ kurv list
🥚 eggs snapshot
╭───┬───────┬───────────┬─────────┬───┬────────╮
│ # │ pid │ name │ status │ ↺ │ uptime │
├───┼───────┼───────────┼─────────┼───┼────────┤
│ 1 │ 35824 │ fastapi │ running │ 0 │ 1s │
│ 2 │ 0 │ fastapi-2 │ stopped │ 0 │ - │
╰───┴───────┴───────────┴─────────┴───┴────────╯
关于特定蛋的详细信息
$ kurv egg <egg:name|id|pid>
这将显示蛋的配置、进程详情等。
停止一个蛋
要停止一个蛋而不删除它,请执行
$ kurv stop <egg:name|id|pid>
这将停止进程,但会保留其配置在篮子中,以防你稍后想要再次启动它。
删除一个蛋
要实际删除一个蛋,运行
$ kurv remove <egg:name|id|pid>
它将停止进程并将蛋从篮子中删除。
重启
如果你需要重启进程,运行
$ kurv restart <egg:name|id|pid>
灵感
pm2
受到健壮的进程管理器 pm2 的启发,我的目标是创建一个轻量级的替代品。pm2 并不是资源消耗者,但我发现自己在一个资源极为有限的服务器上。此外,我迫切想要一个理由深入 Rust,就这样,𝐊𝐮𝐫𝐯 诞生了。
eggsecutor
源自 eggsecutor,𝐊𝐮𝐫𝐯 采用了俏皮的术语 "蛋" 来表示部署的应用。
pueue
pueue 的见解在帮助我了解如何在 Rust 中管理进程方面至关重要。
来自阿根廷 🇦🇷 的 🧉
依赖关系
~9–17MB
~217K SLoC