#docker #env-var #cli #命令行工具 #失败 #退出 #应用程序

app crashie

一个在配置延迟后以随机退出代码退出的命令行工具

4 个版本 (破坏性更新)

0.4.0 2024年1月6日
0.3.0 2024年1月6日
0.2.0 2024年1月4日
0.1.0 2024年1月4日

#633 in 命令行工具

EUPL-1.2

33KB
751

💥 crashie — 一个盒子里的小小失败

Crashie 是一个命令行工具,在配置延迟后以随机退出代码退出。当您想要测试重启行为或需要应用程序失败的情况时使用它。

Sleeping for 12.72 seconds, then exiting with code 130
Exiting with code 130

使用示例

如果您想在10 ± 2秒后随机失败,使用SIGINT(代码 130)或SIGKILL(代码 137),请运行

crashie --sigint --sigkill --delay=10 --delay-stddev=2
crashie --signals=2,3 --delay=10 --delay-stddev=2
echo $?

或者,使用环境变量提供选项

CRASHIE_SIGNALS=2,3 CRASHIE_SLEEP_DELAY=10 CRASHIE_SLEEP_DELAY_STDDEV=2 crashie

Crashie 提供了 TCP 和 UDP 回声功能。如果您想测试健壮的连接逻辑、端口转发(特别是 Kubernetes 的 kubectl port-forward)或类似方面,这非常有用。

要将 crashie 绑定到 TCP 套接字,请使用环境变量 CRASHIE_BIND_TCP_ECHO 或运行例如

crashie --bind-tcp-echo 127.0.0.1:8080

同样,UDP 回声也得到了支持。为此,请使用环境变量 CRASHIE_BIND_UDP_ECHO 或运行例如

crashie --bind-udp-echo 127.0.0.1:8080

在 Linux 上,您可以使用 netcat(例如,使用 TCP nc 127.0.0.1 8080 或使用 UDP nc -u 127.0.0.1 8080)测试回声行为。

为了简化 HTTP 连接的工作,您还可以绑定 HTTP "回声"。为此,请使用环境变量 CRASHIE_BIND_HTTP_ECHO 或运行例如

crashie --bind-http-echo 127.0.0.1:8080

您可以使用 curl(例如,使用 curl -v localhost:8080)测试连接。目前,服务器始终忽略请求的详细信息,并返回 204 No Content

为了支持响应必须恰好是 200 OK 的情况——例如,用于入口检查的存活探测——您可以提供 CRASHIE_HTTP_LIVENESS_PROBE_PATH--http-liveness-probe-path 参数

crashie --bind-http-echo 127.0.0.1:8080 --http-liveness-probe-path /.health/livez

在这种情况下,调用 curl -v localhost:8080 会得到一个 204 No Content

* processing: localhost:8080
*   Trying [::1]:8080...
* Connected to localhost (::1) port 8080
> GET / HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/8.2.1
> Accept: */*
>
< HTTP/1.1 204 No Content
< Server: crashie/0.3.0
< Date: Sat, 06 Jan 2024 14:44:53 GMT
< Content-Length: 0
< Cache-Control: no-cache, no-store
<
* Connection #0 to host localhost left intact

...而 curl -v localhost:8080/.health/livez 则会得到一个 200 OK

* processing: localhost:8080/.health/livez
*   Trying [::1]:8080...
* Connected to localhost (127.0.0.1) port 8080
> GET /.health/livez HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/8.2.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: crashie/0.3.0
< Date: Sat, 06 Jan 2024 14:44:59 GMT
< Content-Length: 0
< Cache-Control: no-cache, no-store
<
* Connection #0 to host localhost left intact

通过Docker运行

该应用程序可以作为 sunside/crashie Docker镜像使用。要通过Docker运行crashie,例如使用:

docker run --rm sunside/crashie --help

提供命令行参数,就像在本地运行一样

docker run --rm sunside/crashie --sigint --sigkill --delay=10 --delay-stddev=2
echo $?

或者,通过环境变量提供配置

docker run --rm \
  --env CRASHIE_SIGNALS=2,3 \
  --env CRASHIE_SLEEP_DELAY=10 \
  --env CRASHIE_SLEEP_DELAY_STDDEV=2 \
  sunside/crashie
echo $?

从crates.io本地安装

要从crates.io安装crashie,运行:

cargo install crashie

从源码运行

要获取文档,运行:

cargo run -- --help

依赖项

~2.2–8MB
~63K SLoC