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 次
31KB
319 行代码(不包括注释)
运行器
一个个人项目,运行命令并将执行结果提交到可配置的 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上有几个类似的项目,可能比这个爱好项目更全面和/或功能丰富。我鼓励您去看看!以下是一些
致谢
- Pēteris Caune,healthchecks.io的创始人!
依赖关系
~13–28MB
~462K SLoC