This is an archive of past FreeBSD releases; it's part of the FreeBSD Documentation Archive.
rc.d 脚本在系统启动时用于启动服务, 并为管理员提供停止、 启动和重新启动某个服务的标准方法。 Ports 安装的脚本会集成到系统的 rc.d 框架中。 关于如何使用它的说明, 可以在 使用手册的 rc.d 章节 找到。 关于可用命令的详细解释, 则可以在 rc(8) 和 rc.subr(8) 找到。 最后, 您可以参阅 这篇文章 了解撰写 rc.d 脚本的最佳实践。
可以安装一或多个 rc 脚本:
USE_RC_SUBR= doormand
这些脚本必须放到 files 目录, 并附加 .in。 与基本系统中的 rc.d 脚本不同, 这种脚本中 . /etc/rc.subr 行必须替换为 . %%RC_SUBR%%, 因为较早版本的 FreeBSD 中并不提供 /etc/rc.subr 文件。 此外, 这里还可以使用标准的 SUB_LIST 替换展开。 除此之外, 我们还强烈推荐使用 %%PREFIX%%、 %%LOCALBASE%%, 以及 %%X11BASE%% 这几个替换展开。 关于 SUB_LIST 的介绍可以在 本书的相关章节 找到。
在 FreeBSD 6.1-RELEASE 之前, 与 rcorder(8) 的集成是通过 USE_RCORDER 而不是 USE_RC_SUBR 来完成的。 但是, 这种方法已经被淘汰。
从 FreeBSD 6.1-RELEASE 开始, 本地安装的 rc.d 脚本 (包括由 port 安装的脚本) 会纳入基本系统的 rcorder(8)。
以下是一个简单的 rc.d 脚本:
#!/bin/sh # PROVIDE: doormand # REQUIRE: LOGIN # # 在 /etc/rc.conf.local 或 /etc/rc.conf 中增加下述设置可以启用这一服务: # # doormand_enable (bool): 默认设为 NO。 # 设为 YES 可以启用 doormand。 # doormand_config (path): 默认设为 %%PREFIX%%/etc/doormand/doormand.cf。 # . %%RC_SUBR%% name="doormand" rcvar=${name}_enable command=%%PREFIX%%/sbin/${name} pidfile=/var/run/${name}.pid load_rc_config $name : ${doormand_enable="NO"} : ${doormand_config="%%PREFIX%%/etc/doormand/doormand.cf"} command_args="-p $pidfile -f $doormand_config" run_rc_command "$1"
这里, 对变量的默认赋值方法应采用 "=", 而非 ":=" 这样的形式。 这是因为, 前一种赋值方法只有在变量未被设置时才设置默认值, 而后一种方法则会在变量没有设置, 或者 其值为空时都设置默认值。 用户非常可能在其 rc.conf.local 中使用类似
doormand_flags=""这样的设置, 而采用 ":=" 来进行赋值, 则会在不经意间覆盖用户所希望的设置。