11.7. 在 FreeBSD 5.X 下使用 rc

Contributed by Tom Rhodes.

FreeBSD 最近整合了 NetBSD 的 rc.d 系统以完成系统初始化。用户要注意 /etc/rc.d 目录下的文件。这些文件中的很多都是可以接受 startstoprestart 选项的基本服务。 例如,sshd(8) 可以用下面的命令重启:

# /etc/rc.d/sshd restart

其它的服务跟这个过程相似。当然,在 rc.conf(5) 指定的服务通常可以自动启动。例如,让网络地址转换(NAT) 守护进程在系统启动的时候启动可以简单的在 /etc/rc.conf 中添加下面一行:

natd_enable="YES"

如果 natd_enable="NO" 行已经存在, 只要简单的把 NO 改成 YES 即可。 rc 脚本在下次重新启动的时候会自动的装载所需要的服务, 像下面所描述的那样。

由于 rc.d 系统在系统启动/关闭时首先启动/停止服务,如果设置了适当的 /etc/rc.conf 变量,标准的 startstoprestart 选项将会执行他们的动作。例如 sshd restart 命令只在 /etc/rc.conf 中的 sshd_enable 设置成 YES 的时候工作。不管是否在 /etc/rc.conf 中设置了,要 startstop 或者 restart 一个服务,命令前可以加上一个“force”前缀。例如要不顾当前 /etc/rc.conf 的设置重新启动 sshd,执行下面的命令:

# /etc/rc.d/sshd forcerestart

用选项 rcvar 可以简单来的检查 /etc/rc.conf 中用适当的 rc.d 脚本启动的服务是否被启用。从而管理员可以运行这样的程序来检查 sshd 是否真的在 /etc/rc.conf 中被启动了:

# /etc/rc.d/sshd rcvar
# sshd
$sshd_enable=YES

Note: 第二行 (# sshd) 是从 sshd 命令中输出的,而不是 root 控制台。

为了确定一个服务是否真的在运行,可以用 status 选项。例如验证 sshd 是否真的启动了:

# /etc/rc.d/sshd status
sshd is running as pid 433.

reload 一个服务也是可以的。 这将要尝试发送一个信号给一个单独的服务, 强制这个服务重新装载它的配置文件。大多数情况这意味着给服务发送一个 SIGHUP 信号。

rcNG 结构不仅仅是给网络服务提供的, 它也给很多系统初始化提供服务。例如,处理 bgfsck 文件。当这个脚本执行的时候,它会输出下列信息:

Starting background file system checks in 60 seconds.

这个文件用做后台文件系统检查,系统初始化的时候完成。

很多系统服务依赖其他服务提供的相应功能。例如,NIS 和其他基于 RPC 的服务启动可能在 rpcbind 服务启动之前失败。 要解决这个问题,依赖关系信息和其他头信息当作注释被包含在每个启动脚本文件的前面。 程序在系统初始化时分析这些注释以决定调用其他系统服务来满足依赖关系。 下面的字句可能会包含在每个启动脚本文件的前面:

通过这种方法,系统管理员可以容易的控制系统而不用像其他一些 UNIX® 操作系统一样要用 “runlevels” 来控制。

FreeBSD5.X 的附加信息: rc.d 系统可以在 rc(8)rc.subr(8) 手册页中找到。