6.23. 启动和停止服务 (rc 脚本)
上一页 | 第 6 章 特殊情况 | 下一页

## 6.23. 启动和停止服务 (rc 脚本)

`rc.d` 脚本在系统启动时用于启动服务， 并为管理员提供停止、 启动和重新启动某个服务的标准方法。 Ports 安装的脚本会集成到系统的 `rc.d` 框架中。 关于如何使用它的说明， 可以在 使用手册的 rc.d 章节 找到。 关于可用命令的详细解释， 则可以在 rc(8) 和 rc.subr(8) 找到。 最后， 您可以参阅 这篇文章 了解撰写 `rc.d` 脚本的最佳实践。

可以安装一或多个 `rc.d` 脚本：

USE_RC_SUBR= doormand

这些脚本必须放到 `files` 目录， 并附加 `.in`。 这个文件中可以使用标准的 `SUB_LIST` 替换展开。 除此之外， 我们还强烈推荐使用 `%%PREFIX%%` 和 `%%LOCALBASE%%` 替换展开。 关于 `SUB_LIST` 的介绍可以在 本书的相关章节 找到。

在 FreeBSD 6.1-RELEASE 之前， 与 rcorder(8) 的集成是通过 `USE_RCORDER` 而不是 `USE_RC_SUBR` 来完成的。 不过， 除非 port 需要提供安装进基本系统这样的选项， 或者服务需要在 `rc.d` 脚本 `FILESYSTEMS` 之前运行这类特殊情况， 一般来说是不需要使用这个功能的。

从 FreeBSD 6.1-RELEASE 开始， 本地安装的 `rc.d` 脚本 (包括由 port 安装的脚本) 会纳入基本系统的 rcorder(8)。

以下是一个简单的 `rc.d` 脚本：

#!/bin/sh # $FreeBSD$ # # PROVIDE: doormand # REQUIRE: LOGIN # KEYWORD: shutdown # # 在 /etc/rc.conf.local 或 /etc/rc.conf 中增加下述设置可以启用这一服务： # # doormand_enable (bool): 默认设为 NO。 # 设为 YES 可以启用 doormand。 # doormand_config (path): 默认设为 %%PREFIX%%/etc/doormand/doormand.cf。 # . /etc/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"

除非有很站得住脚的理由提前启动服务，所有的 ports 脚本应使用

REQUIRE: LOGIN

。 如果服务需要以特定用户 (除 root 之外) 身份启动， 则必须这样做。 在前面的例子中， 我们还使用了

KEYWORD: shutdown

以便让 mythical port 在系统停机的过程中以正常的方式终止， 因为它需要在系统引导过程中启动服务。 如果脚本没有启动任何服务， 则并不需要这样做。

这里， 对变量的默认赋值方法应采用 "="， 而非 ":=" 这样的形式。 这是因为， 前一种赋值方法只有在变量未被设置时才设置默认值， 而后一种方法则会在变量没有设置， 或者 其值为空时都设置默认值。 用户非常可能在其 `rc.conf.local` 中使用类似

doormand_flags=""

这样的设置， 而采用 ":=" 来进行赋值， 则会在不经意间覆盖用户所希望的设置。

### 注意:

新增的脚本均不应使用 `.sh` 后缀。 未来， 仍然包含这一后缀的脚本将被批量改名。

### 6.23.1. 卸载时停止服务

可以在卸载的过程中自动地停止服务。 我们建议只有在绝对必要， 例如必须在删除文件之前停止服务这类的情况下才使用这一功能。 通常来说， 决定是否在卸载时停止服务是系统管理员需要考虑的事情。 另外要注意， 这个功能也会影响升级过程。

需要时可以在 `pkg-plist` 中加入：

@stopdaemon doormand

这里的参数必须与 `USE_RC_SUBR` 变量的内容匹配。

上一页 | 上一级 | 下一页
6.22. 使用数据库 | 起始页 | 6.24. 添加用户和用户组

本文档和其它文档可从这里下载： ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题，请先阅读 文档，如不能解决再联系 <questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.