#进程管理器 #进程 #管理器 #守护进程 #守护化 #命令行界面 #Node.js

应用程序 kurv

一个用于守护进程化命令和程序的进程管理器。受 pm2 启发,但更轻量级且功能不那么全面。

2 个版本

0.0.2 2024年1月4日
0.0.1 2024年1月4日

#1854命令行工具

MIT 许可协议

130KB
2.5K SLoC




𝐤𝐮𝐫𝐯 是一个进程管理器,主要用于 Node.js 和 Python 应用程序。它使用 Rust 编写。它可以将您的应用程序守护进程化,以便它们可以在后台运行。如果它们崩溃,它也会重新启动它们。

Crates.io Version

文档Crate说明




[!WARNING]
注意,这个项目是我的 Rust 学习游乐场,还不是生产就绪的

  • 我构建这个项目是因为我的应用程序需要一个进程管理器,同时我也想学习 Rust。所以,这就是它……我的第一个 Rust 项目!
  • 还没有测试(哦!)
  • 仅在 Windows 11 上进行测试
  • Rust 新手警告!🚨
  • 我正在用我的项目使用它,但不是大规模使用

为什么是 𝐤𝐮𝐫𝐯?

那么,为什么叫 𝐤𝐮𝐫𝐯?嗯,它在许多我不说的语言中意味着“篮子”,比如挪威语(但它听起来很酷 😄)。将 𝐤𝐮𝐫𝐯 视为您的应用程序的篮子。在 kurv 中,我们称每个部署的应用程序为 egg。所以,让我们去收集一些篮子里的鸡蛋 🥚。

安装

[!NOTE] 𝐤𝐮𝐫𝐯 可以作为服务器或 CLI 客户端运行,使用相同的二进制文件。

服务器负责管理鸡蛋,而客户端用于与服务器交互,告诉它要做什么或请求信息。

下载二进制文件

从 GitHub 下载最新版本 这里

crates.io

您也可以使用 cargocrates.io 安装它

cargo install kurv

使用方法

kurv usage

启动服务器

要启动服务器,请输入

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