当编写好了一个脚本,它需要被整合到 rc.d
中去。
一个重要的步骤就是安装脚本到 /etc/rc.d
(对基本系统而言)或 /usr/local/etc/rc.d
(对ports而言)中去。在 <bsd.prog.mk
> 和
<bsd.port.mk
> 中都为此提供了方便的接口,
通常你不必担心适当的所有权限和模式。系统脚本应当是通过可以在
src/etc/rc.d
找到的 Makefile
安装的。Port 脚本可以像
Porter's Handbook
中描述那样通过使用 USE_RC_SUBR
来被安装。
不过,我们应该预先考虑到我们脚本在系统启动顺序中的位置。 我们的脚本所处理的服务可能依赖于其它的服务。举个例子, 没有网络接口和路由选择的启用运行的话,一个网络守护进程是不起作用的。 即使一个服务看似什么都不需要,在基本文件系统检查挂载完毕之前也很难启动。
之前我们曾提到过 rcorder(8)。现在是时候来密切地关注下它了。
笼统地说,rcorder(8) 处理一组文件,检验它们的内容,
并从文件集合打印一个文件列表的依赖顺序到 stdout
标准输出。这点是用于保持文件内部的依赖信息,
而每个文件只能说明自己的依赖。一个文件可以指定如下信息:
它 提供 的 “条件” 的名字(意味着我们服务的名字);
它 需求 的 “条件” 的名字;
应该 先 运行的文件的 “条件”的名字;
能用于从全部文件集合中选择一个子集的额外 关键字( rcorder(8) 可通过选项而被指定来包括或省去由特殊关键字所列出的文件。)
并不奇怪的是,rcorder(8) 只能处理接近 sh(1) 语法的文本文件。rcorder(8) 所解读的特殊行看起来类似 sh(1) 的注释。这种特殊文本行的语法相当严格地简化了其处理。 请查阅 rcorder(8) 以获取更详细的信息。
除使用 rcorder(8) 的特殊行以外, 脚本可以坚持将其依赖的其它服务强制性启动。当其它服务是可选的, 并因系统管理员错误地在 rc.conf(5) 中禁用掉该服务而使其不能自行启动时,会需要这一点。
将这些谨记在心,我们来考虑下简单结合了依赖信息增强的守护进程脚本:
#!/bin/sh # PROVIDE: mumbled oldmumble# REQUIRE: DAEMON cleanvar frotz
# BEFORE: LOGIN
# KEYWORD: nojail shutdown
. /etc/rc.subr name=mumbled rcvar=mumbled_enable command="/usr/sbin/${name}" start_precmd="${name}_prestart" mumbled_prestart() { if ! checkyesno frotz_enable && \ ! /etc/rc.d/frotz forcestatus 1>/dev/null 2>&1; then force_depend frotz || return 1
fi return 0 } load_rc_config $name run_rc_command "$1"
跟前面一样,做如下详细分析:
该行声明了我们脚本所提供的 “条件” 的名字。 现在其它脚本可以用那些名字来标明我们脚本的依赖。 注意:通常脚本指定一个单独的已提供的条件。然而, 并没有什么妨碍我们从列出的那些条件中指定,例如, 为了兼容性的目的。 在其它情况,主要的名称,或者说唯一的,
| |
因此我们的脚本指示了其依赖于别的脚本所提供的
“条件”。根据这些行的信息,脚本请示
rcorder(8) 以将其放在一个或多个提供
注意:
除了条件相对应的每个单独服务,脚本使用元条件和它们的
“占位符” 来保证某个操作组在其它之前被执行。
这些是由 切记将一个服务名称放进 | |
如我们从上述文字所记起的,rcorder(8)
关键字可以用来选择或省略某些脚本。即任何 rcorder(8)
用户可以通过指定 在 FreeBSD 中,rcorder(8) 被
| |
以
如果你仍不能完成不含 |
本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
如果对于FreeBSD有问题,请先阅读
文档,如不能解决再联系
<questions@FreeBSD.org>.
关于本文档的问题请发信联系
<doc@FreeBSD.org>.