rcorder.8

RCORDER(8)

RCORDER(8)

FreeBSD System Manager's Manual

RCORDER(8)

rcorder

打印相互依赖文件的依赖顺序

rcorder [-gp] [-k keep] [-s skip] file ...

rcorder 实用程序旨在打印出一组相互依赖的文件的依赖顺序。 通常,它用于查找一组 shell 脚本的执行顺序,其中某些文件必须在其他文件之前执行。

传递给 rcorder 的每个文件都必须用特殊的行进行注释(看起来像 shell 的注释),这些行表明文件对序列中某些点的依赖关系,称为 “conditions” ,并且表明对于每个文件, “conditions” 可能会被该文件填充。

在每个文件中,必须出现一个包含一系列 ‘REQUIRE’, ‘PROVIDE’, ‘BEFORE’ 和 ‘KEYWORD’ 行的块。 线条的格式是刚性的。 每行必须以一个 ‘#’ 开头,后跟一个空格,然后是 ‘PROVIDE:’, ‘REQUIRE:’, ‘BEFORE:’ 或 ‘KEYWORD:’ 。 不允许有偏差。 然后每个依赖行后跟一系列条件,由空格分隔。 可能会出现多个 ‘PROVIDE’, ‘REQUIRE’, ‘BEFORE’ 和 ‘KEYWORD’ 行,但所有这些行必须按顺序出现,没有任何中间行,因为一旦到达不遵循格式的行,解析就会停止。

选项如下:

-g

生成完整依赖图的 GraphViz (.dot),而不是明文调用顺序列表。

-k keep

将指定的关键字添加到 “keep list” 中。 如果给出任何 -k 选项,则仅列出包含匹配关键字的那些文件。 可以多次指定此选项。

-p

生成适合并行启动的排序,将可以同时执行的文件放在同一行。

-s skip

将指定的关键字添加到 “skip list” 中。 如果给出任何 -s 选项,则不列出包含匹配关键字的文件。 可以多次指定此选项。

下面是一个示例块:

# REQUIRE: networking syslog # REQUIRE: usr # PROVIDE: dns nscd

该块声明它出现的文件取决于 ‘networking’, ‘syslog’, 和 ‘usr’ 条件,并提供 ‘dns’ 和 ‘nscd’ 条件。

一个文件可能包含零个 ‘PROVIDE’ 行,在这种情况下它不提供条件,并且可能包含零个 ‘REQUIRE’ 行,在这种情况下它没有依赖关系。 在传递给 rcorder 的一组参数中必须至少有一个没有依赖关系的文件,以便它在依赖关系排序中找到起始位置。

有几个 KEYWORDs 在使用:

firstboot, nojail, nojailvnet, nostart

由 rc(8) 使用。

resume

/etc/rc.resume 使用(参见 acpiconf(8))

shutdown

由 rc.shutdown(8) 使用。

从基础系统和 ports(7) 打印服务的依赖顺序:

$ rcorder /etc/rc.d/* /usr/local/etc/rc.d/*

计算基本系统中指定 shutdown 关键字的服务数量,同时跳过带有 firstbootnojailvnet 的服务:

$ rcorder -k nostart -s firstboot -s nojailvnet /etc/rc.d/* | wc -l 3

如果 rcorder 实用程序在处理文件列表时遇到错误,它可能会打印以下错误消息之一并以非零状态退出。

Requirement %s in file %s has no providers.

没有文件具有对应于另一个文件的 ‘PROVIDE’ 行中存在的条件的 ‘REQUIRE’ 行。

Circular dependency on provision %s in file %s.

一组文件具有在处理所述条件时检测到的循环依赖关系。 循环可视化遵循此消息。

Circular dependency on file %s.

一组文件具有循环依赖关系,在处理所述文件时检测到该循环依赖关系。

%s was seen in circular dependencies for %d times.

作为循环依赖循环一部分的每个节点都会报告此类遭遇的总数。 在与损坏的依赖项作斗争时,从具有最大计数器的文件开始。

直接依赖用实线绘制, ‘BEFORE’ 依赖用虚线绘制。 图表的每个节点代表 ‘PROVIDE’ 行中的一个项目。 如果有多个文件提供一个项目,则会显示用 basename(3) 缩短的文件名列表。 如果 ‘PROVIDE’ 项目与文件名不匹配,也会显示缩短的文件名。

检测到循环依赖关系的边缘和节点以粗体红色绘制。 如果文件在 ‘REQUIRE’ 或 ‘BEFORE’ 中有无法提供的项目,则此缺失的提供者和要求也将被绘制为红色粗体。

acpiconf(8), rc(8), rc.shutdown(8), service(8)

rcorder 实用程序出现在 NetBSD 1.5 中。 rcorder 实用程序首次出现在 FreeBSD 5.0 中。

由 Perry E. Metzger <perry@piermont.com> 和 Matthew R. Green <mrg@eterna.com.au> 撰写。

REQUIRE’ 关键字具有误导性:它没有描述在启动脚本之前必须运行哪些守护进程。 它描述了在依赖顺序中必须将哪些脚本放在它之前。 例如,如果您的脚本在 ‘sshd’ 上有一个 ‘REQUIRE’ ,这意味着该脚本必须按依赖顺序放置在 ‘sshd’ 脚本之后,而不一定需要启动或启用 sshd

September 8, 2020

FreeBSD 13.1-RELEASE

最后更新于

FreeBSD 中文社区