8 个版本
0.3.2 | 2024年3月2日 |
---|---|
0.3.1 | 2023年12月23日 |
0.3.0 | 2022年4月2日 |
0.2.0 | 2022年3月27日 |
0.1.2 | 2020年12月25日 |
#1 in #multi-process
每月 65 次下载
130KB
3.5K SLoC
Ultraman (Rust Foreman)
管理基于 Procfile 的应用程序。
这是一个使用 Ruby 编写的 Rust 实现。
因此,规范与 Ruby 的 foreman
完全相同。
🚉 平台
- Linux
- macOS
- windows (不支持)
🦀 安装
下载二进制文件
从 发布页面 下载,并解压缩到 PATH 目录中。
如果您想安装 man
,
假设您已将存档解压到 ./tmp
目录
install -Dm644 ./tmp/ultraman.1 /usr/local/share/man/man1/ultraman.1
或者
git clone [email protected]:yukihirop/ultraman.git && cd ultraman
make install_man
Homebrew
brew tap yukihirop/homebrew-tap
brew install ultraman
💻 命令
$ ultraman --help
ultraman 0.3.0
Ultraman is a manager for Procfile-based applications. Its aim is to abstract away the details of the Procfile format,
and allow you to either run your application directly or export it to some other process management format.
USAGE:
ultraman [SUBCOMMAND]
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
SUBCOMMANDS:
check Validate your application's Procfile
export Export the application to another process management format
help Prints this message or the help of the given subcommand(s)
run Run a command using your application's environment
start Start the application
🚀 指南
创建如下 Procfile
exit_0: sleep 5 && echo 'success' && exit 0;
exit_1: sleep 5 && echo 'failed' && exit 1;
loop: while :; do sleep 1 && echo 'Hello World'; done;
然后执行以下命令
ultraman start
$ ultraman start
02:22:34 system | exit_1.1 start at pid: 23374
02:22:34 system | loop.1 start at pid: 23375
02:22:34 system | exit_0.1 start at pid: 23376
02:22:35 loop.1 | Hello World
02:22:36 loop.1 | Hello World
02:22:37 loop.1 | Hello World
02:22:38 loop.1 | Hello World
02:22:39 exit_1.1 | failed
02:22:39 exit_0.1 | success
02:22:39 exit_0.1 | exited with code 0
02:22:39 system | sending SIGTERM for exit_1.1 at pid 23374
02:22:39 system | sending SIGTERM for loop.1 at pid 23375
02:22:39 exit_1.1 | exited with code 1
02:22:39 system | sending SIGTERM for loop.1 at pid 23375
02:22:39 loop.1 | terminated by SIGTERM
如果在 5 秒内检测到 ctrl-c,则会向所有子进程发送 SIGTERM
,并终止进程。
$ ultraman start
02:23:58 system | loop.1 start at pid: 23588
02:23:58 system | exit_0.1 start at pid: 23589
02:23:58 system | exit_1.1 start at pid: 23590
02:23:59 loop.1 | Hello World
02:24:00 loop.1 | Hello World
02:24:01 loop.1 | Hello World
^C02:24:01 system | SIGINT received, starting shutdown
02:24:01 system | sending SIGTERM to all processes
02:24:01 system | sending SIGTERM for loop.1 at pid 23588
02:24:01 system | sending SIGTERM for exit_0.1 at pid 23589
02:24:01 system | sending SIGTERM for exit_1.1 at pid 23590
02:24:01 exit_1.1 | terminated by SIGTERM
02:24:01 exit_0.1 | terminated by SIGTERM
02:24:01 loop.1 | terminated by SIGTERM
🌎 环境
- rustc 1.74.0 (79e9716c9 2023-11-13) (Homebrew)
- cargo 1.74.0
⚾️ 示例
命令 | 链接 |
---|---|
ultraman start |
README.md |
ultraman run |
README.md |
ultraman export |
README.md |
ultraman check |
README.md |
💪 开发
cargo run start
cargo run run <app>
cargo run export <format> <location>
如果您想查看帮助,可以使用以下命令
cargo run -- --help
cargo run start --help
cargo run run --help
cargo run export --help
✍️ 测试
src/signal.rs
通常忽略需要发送 SIGINT 来终止进程的测试,因为它可能会中断其他测试
cargo test
cargo test -- --ignored # unit test about src/signal.rs
# or
cargo test -- --nocapture
👽 在 Docker 中开发
当在 Mac 上进行开发的人员想要检查 Ubuntu 上的操作时,非常有用。
{
docker-compose build
docker-compose up -d
docker exec -it ultraman_test_ubuntu_1 /bin/bash
}
# in docker
root@65241fa12c67:/home/app# make test
🧔 man
查看 man
make man
安装 man
make install_man
📚 参考
我确实参考了以下仓库的实现。
依赖项
~9–22MB
~266K SLoC