分类: BSD
2011-05-15 21:31:05
FreeBSD 下有一个 的命令,它打印出 /etc/rc.d/ 目录下脚本文件的启动顺序。从习惯上来说,我们可能以为 /etc/rc.d/ 下的脚本是通过类似名称排序的简单方式确定启动顺序的,其实不然,rc 脚本机制在其中起了非常重要的作用。
脚本机制是通过在相应脚本中设置一定的标志来影响脚本的启动顺序,比如:REQUIRE、PROVIDE、BEFORE、KEYWORD 等,这些词的含义是显而易见的。REQUIRE 表示当前脚本会需要哪些服务先行启动;PROVIDE 表示当前脚本提供的服务名称,用于其他脚本依附;BEFORE 表示在哪些服务启动之前启动当前脚本。
当你的 /etc/rc.d/* 基本服务依赖通过 Ports 安装的服务先行启动的时候,这个排序机制非常有用。比如有一个 的软件,功能就是将 BIND 后端的域名信息保存到数据库,对于巨量域名信息服务器非常有用。这个时候,你需要让 PostgreSQL 服务在 /etc/named 服务启动之前就必须就位,否则,named 将无法连接 PostgreSQL,一直等待到超时,严重影响服务器正常启动。如果使用 rc 脚本机制,非常容易就能很好的解决。
首先,我们需要将 /usr/local/etc/rc.d/010.pgsql.sh 挪到 /etc/rc.d/pgsql,这是因为和 rcorder 相关的排序机制只能用在 /etc/rc.d 目录。然后我们编辑 /etc/rc.d/pgsql 文件中 rcorder 标志:
为了远程管理方便,我们让 PostgreSQL 在 sshd 之后启动。接着,我们需要修改 /etc/rc.d/named 的排序标志:
在 /etc/rc.d/named 脚本中的 REQUIRE 部分增加了在 /etc/rc.d/pgsql “PROVIDE”的名称:postgresql,这样,系统认为在启动 /etc/rc.d/named 之前需要预先启动 /etc/rc.d/pgsql 服务。
最后,你可以通过 rcorder /etc/rc.d/* 命令察看完整的服务启动顺序清单。