#container #supervisor #init

bin+lib horust

一个完整的监督和初始化系统,专为在容器中运行而设计

7 个版本

0.1.6 2022年12月18日
0.1.4 2021年5月6日
0.1.3 2021年4月26日
0.1.2 2021年3月8日
0.0.1 2020年3月14日

#900命令行实用程序

每月 25 次下载

MIT 许可证

115KB
2.5K SLoC

CI MIT licensed Gitter chat

Horust 是一个用 Rust 编写的监督/初始化系统,设计用于在容器内运行。

目录

目标

  • 监督:成为一个功能齐全的监督系统,设计用于在容器中运行(但不仅限于此)。
  • 易于理解:代码易于理解、修改和删除,以满足需要。
  • 完整性:可以作为您自己的 init 系统的直接替代品。
  • 稳定可靠:成为您最喜欢的埃及神,在所有用例中都值得信赖。

状态

到目前为止,这应被视为 Alpha 软件版本。也就是说,您可以使用它,但请自行决定。

使用方法

假设您想创建一个网站健康监控系统。您可以使用 Horust 和一个小型 Python 脚本来创建一个。

1. 创建一个新的目录

将包含我们的服务

mkdir -p /etc/horust/services

2. 创建您的第一个 Horust 服务

提示:您还可以使用 horust --sample-service > new_service.toml 来引导创建新服务的创建。

/etc/horust/services/healthchecker.toml 下为 Horust 创建一个新的配置文件

command = "/tmp/healthcheck.py"
start-delay = "10s"
[restart]
strategy = "never"

这里有一些注意事项

  • 此库使用 TOML 进行配置,以与 Rust 选择配置语言很好地配合。
  • 您的服务文件支持许多 属性,但只有 command必需的

在启动时,Horust 将读取此服务文件,并运行 command。根据重启策略 "never",一旦服务完成了其任务,它将 不会重启,Horust 将退出。

如您所见,它将运行 /tmp/healthcheck.py Python 脚本,该脚本尚不存在。让我们创建它!

3. 创建您的 Python 脚本

/tmp/healthcheck.py 下创建一个新的 Python 脚本

#!/usr/bin/env python3
import urllib.request
import sys
req = urllib.request.Request("https://www.google.com", method="HEAD")
resp = urllib.request.urlopen(req)
if resp.status == 200:
    sys.exit(0)
else:
    sys.exit(1)

别忘了使其可执行

chmod +x /tmp/healthcheck.py

4. 构建Horust

这一步仅在此步骤中需要,因为我们还没有发布版本,或者如果你喜欢尝试最新的功能。

构建Horust需要Rust。安装完成后,可以使用Rust的cargo来构建Horust。

cargo build --release

4. 运行Horust

现在你可以直接

./horust

默认情况下,Horust在/etc/horust/services文件夹内搜索服务(我们在步骤1中已创建该文件夹)。

从现在起,每隔10秒,Horust将向https://google.it发送一个HTTP HEAD请求。如果响应与200不同,则存在问题!

在这种情况下,我们只是以不同的退出代码退出(即退出代码为1而不是0)。但在现实生活中,你可以触发其他操作——比如将此信息存储在数据库中进行分析,或者发送电子邮件给网站所有者。

5. 完成工作

使用Ctrl+C停止Horust。Horust将向所有正在运行的服务发送SIGTERM信号,如果在一段时间内没有收到回复,它将通过发送额外的SIGKILL信号来终止它们。


查看文档以获取服务配置文件上所有可用选项的完整参考。以下是一个概述。

command = "/bin/bash -c 'echo hello world'"
start-delay = "2s"
start-after = ["database", "backend.toml"]
stdout = "STDOUT"
stderr = "/var/logs/hello_world_svc/stderr.log"
user = "root"
working-directory = "/tmp/"

[restart]
strategy = "never"
backoff = "0s"
attempts = 0

[healthiness]
http-endpoint = "https://127.0.0.1:8080/healthcheck"
file-path = "/var/myservice/up"

[failure]
successful-exit-code = [ 0, 1, 255]
strategy = "ignore"

[termination]
signal = "TERM"
wait = "10s"
die-if-failed = ["db.toml"]

[environment]
keep-env = false
re-export = [ "PATH", "DB_PASS"]
additional = { key = "value"} 

贡献

感谢您考虑为horust做出贡献!要开始,请查看CONTRIBUTING.md

许可证

Horust在MIT许可下提供。请阅读附带的许可文件

依赖项

~7–20MB
~287K SLoC