#rc #conf #service #script #command #default #file

bin+lib rc_conf

rc_conf 提供了 rc.conf 和 rc.d-like 数据结构供消费

3 个版本 (破坏性更新)

0.4.0 2024 年 8 月 24 日
0.3.0 2024 年 8 月 19 日
0.1.0 2024 年 8 月 19 日

#52缓存

Download history 370/week @ 2024-08-18

每月 380 次下载
用于 2 crates

Apache-2.0

120KB
3K SLoC

rc_conf

rc_conf 提供了由 FreeBSD 的 init 系统启发的类似 rc 的配置语法。rc_conf 的核心原则是将配置与运行时分离。rc_conf 通过将配置放入 rc.conf 文件(类似于 BSD 上的 /etc/rc.conf)来实现这一点,然后通过 rc.d 服务存根运行程序。

例如:memcached 服务部署从两个部分开始。第一部分是 rc.d 服务存根。它看起来像这样

#!/usr/bin/env rcscript

DESCRIBE=A single memcached instance.
COMMAND=memcached -v

该格式旨在自我描述。需要注意的两个问题是,此文件应该是可执行的,并且命令应在前台运行,而不是作为守护进程运行。

如果我们直接运行此服务,它将不会运行。默认情况下,每个服务都是禁用的。要启用 memcached,创建一个包含以下内容的 rc.conf

memcached_ENABLED="YES"

这会导致 rustrc(在 rc_conf 上编写的监督程序)以一些失败时的回退措施保持 memcached 守护程序运行。

这并不是一个非常有用的例子,因为我们的最终状态只是一个起点。我们可能想要配置 memcached,并且每次都回到 rc.d 文件并重新部署它将不会很有趣。

进入 rc_conf 的第一原则:配置与值的使用之间的分离。rc_conf 脚本通过将命令行应用程序绑定到 rc.conf 文件来提供配置的 "钩子"。例如,如果我们想要配置 memcached 的端口和主机名,我们修改 rc.d 脚本来像这样

COMMAND=memcached -v ${HOST:+-i ${HOST}} ${PORT:+-p ${PORT}}

这将从运行 memcached 的 rc_conf 文件中获取 HOST 和 PORT 的值。但全局变量很快就会变得混乱。哪个是 HOST;哪个是 PORT?这就是 rc_conf 发挥作用的地方。要设置主机名,请将以下内容添加到 rc.conf

memcached_HOST="memcached.example.org"
memcached_PORT="11211"

如果其中任何一个不存在,则将使用无“memcache_”前缀的版本替代。因此,要为所有服务指定一个默认主机并允许覆盖,请指定 HOST=default.example.org

别名

要启动第二个运行在 22122 的 memcached,我们可以将以下内容添加到我们的 rc.conf

memcached_two_INHERIT="YES"
memcached_two_ALIASES="memcached"
memcached_two_PORT="22122"

这样的别名使用一个 rc.d 占位符来启动两个 memcached 实例。

状态

维护跟踪。该库被认为已稳定,如果一年内没有更改,则将进入维护模式。

范围

这个crate提供了RcConf类型、rcscript解释器和其他rc工具。

工具

  • rcdebug:显示 rc_conf 文件的调试结构。用法:rcdebug rc.conf
  • rcexamine:显示解析器看到的 rc_conf。用法:rcexamine rc.conf:rc.conf.local
  • rcinvoke:以 rc_conf 规定的方式在前台运行服务。用法:rcinovke --rc-conf-path rc.conf:rc.conf.local --rc-d-path rc.d:/srv/rc.d memcached
  • rclist:列出在rc.d路径中可用的rc.d脚本。用法:rclist rc.d /srv/rc.d
  • rcvar:输出服务查找其配置的 rcvariables。用法:rcvar --rc-conf-path rc.conf:rc.conf.local --rc-d-path rc.d:/srv/rc.d memcached
  • rcscript:rc.d shell stubs 的解释器。用法:作为一个解释器

瑕疵

  • 在变量声明之外的具有 '{''}' 字符的字符串现在无法正确解析。

文档

最新文档始终可在 docs.rs 获取。

依赖项

~0–300KB