5 个版本

0.4.4 2024年2月21日
0.4.3 2024年2月20日
0.4.2 2024年2月17日
0.4.1 2024年2月17日
0.3.0 2024年2月5日

配置 类别中排名 #135

每月下载量 21

MIT 许可证

31KB
319 行代码(不包括注释)

运行器

master: master分支构建状态

一个个人项目,运行命令并将执行结果提交到可配置的 healthchecks.io 实例(>=v3,需要自动配置)。

在运行时需要提供您的 HealthChecks 实例的 URL,包括您的 ping_key。由于 ping_key 被视为秘密,用户可能希望将其从 shell 历史记录中移除,并从调用 hc-runner 的任何 cron 脚本中移除;为此,作为 --url 标志的替代方案,您也可以在配置文件或通过 HC_RUNNER_URL 环境变量中指定 URL。所有其他选项都仅从命令行标志中获取。

请考虑限制对包含您的 ping_key 的任何文件的访问(例如,使用 chmod 0600),这可能会包括 hc-runner 配置文件。

如果您使用的是托管的健康检查服务器,您的 URL 可能看起来像 https://hc-ping.com/{ping_key}/

快速入门

$ cargo run -q -- --help
Command runner for healthchecks.io

Usage: hc-runner [OPTIONS] --slug <NAME> <COMMAND>...

Arguments:
  <COMMAND>...

Options:
  -q, --quiet              Silence logging / warnings. Does not affect called command's output
  -s, --slug <NAME>        Set healthchecks slug for this call
      --success-only       Disable calling `/start` and only ping healthchecks if the test was successful
  -t, --timeout <TIMEOUT>  Set timeout for requests to healthchecks server [default: 10]
  -u, --url <URL>          Specify the URL of the healthchecks server for this call
  -v, --verbose...         Increase logging verbosity. May be repeated. Defaults to `Level::WARN`
  -h, --help               Print help
  -V, --version            Print version

运行器:

  • 默认情况下,会向 /start 发送请求以标记脚本的开始执行,并在这里使用 ?create=1 来创建一个新健康检查,如果该健康检查不存在的话。
  • 默认情况下,会发送请求到/{status_code}来标记执行结束并反映退出状态(例如,对于成功退出,使用/0)并将stderr作为正文发送
  • 反映了被调用命令的退出状态、stdout和stderr
  • 可以通过--success-only选项选择性地只报告成功的运行
    • 这将会阻止预期有时会失败的服务的失败通知,但如果在(健康检查配置的)每个时间段内至少有一个成功的运行,则仍然需要通知
    • 不报告执行时间或收集stderr
  • 可以使用-- trailing args语法来区分被调用命令中的标志,例如
    • hc-runner -- command使hc-runner更详细
    • hc-runner -- command -- v-v标志传递给command
    • hc-runner -- command -- v同时执行这两者
  • 在MacOS上,在命令前添加/usr/bin/caffeinate以保持长时间运行的命令处于活动状态

示例

$ git clone https://github.com/n8henrie/runner-rs.git
$ cd runner-rs
$ export HC_RUNNER_URL=http://your.server.url
$ cargo build --release
$ ./target/release/runner --slug say_foo -- echo foo
foo
$ echo $?
0
$ ./target/release/runner \
    --slug epic_fail \
    -- bash -c 'echo bar >/dev/stderr; exit 1'
bar
$ echo $?
1

注意

调试

-vvv是你的好朋友。请注意,输出将包含你的ping_key

由于默认的create=1,当你使用伪造的slug(--slug=foo)进行测试时,会污染你的HealthChecks实例,但如果你使用伪造的URL(--url=http://broken),输出将会被错误信息充斥。在测试/实验期间,请考虑使用带有确保会失败的命令(例如false)的--success-only,这将完全防止对服务器的调用。

测试

集成测试使用httpmock库提供模拟服务器。测试应该使用--test-threads=1进行,否则可能会出错。目标make test为你设置了此参数。

macOS

在macOS上,runner在命令前添加caffeinate以保持长时间运行的过程处于活动状态。

macOS的新版本内置了隐私和安全工具,可能阻止runner访问敏感目录,如~/Documents,特别是在从launchd运行自动化脚本时。在Makefile中的install-macos目标中包含了一个解决方案,该解决方案应该从config.env读取RUNNER_URL(见config-sample.env),编译并安装项目,然后显示一些权限对话框,允许您向runner提供对这些目录的访问权限。如果您运行的脚本不访问如~/Desktop~/Documents~/Downloads之类的敏感目录,则无需为此烦恼。如果您确实使用这种方法,您将不得不从您的healthchecks.io实例中删除一个名为runner-rs-setup-delete-me的检查。

替代方案

crates.io上有几个类似的项目,可能比这个爱好项目更全面和/或功能丰富。我鼓励您去看看!以下是一些

致谢

依赖关系

~13–28MB
~462K SLoC