BSD rc.d脚本编程实战
上一页 |  | 下一页

# 5 启动并停止简单守护进程

我们早先说过 rc.subr(8) 是能够提供默认方法的。 显然，这些默认方法并不是太通用的。 它们都是适用于大多数情况下来启动和停止一个简单的守护进程况。 我们来假设现在需要为一个叫做 `mumbled` 的守护进程编写一个 `rc.d`脚本， 在这里：/para>

    #!/bin/sh

    . /etc/rc.subr

    name="mumbled"
    rcvar=`set_rcvar`
    command="/usr/sbin/${name}"

    load_rc_config $name
    run_rc_command "$1"

感到很简单吧，不是么？我们来检查下我们这个小脚本。 只需要注意下面的这些新知识点：

  这个 `command` 变量对于 rc.subr(8) 来说是有意义的。当它被设置时， rc.subr(8) 将根据提供传统守护进程的情形而生效。 特别是，将为这些参数提供默认的方法： `start`，`stop`， `restart`，`poll`， 以及 `status`。

  该守护进程将会由运行中的 `$command` 配合由 `$mumbled_flags` 所指定的命令行标帜来启动。 因此，对默认的 `start` 方法来说， 所有的输入数据在我们脚本变量集合中都可用。与 `start` 不同的是， 其他方法可能需要与进程启动相关的额外信息。举个例子， `stop` 必须知道进程的 PID 号来终结进程。 在目前的情况中，rc.subr(8) 将扫描全部进程的清单， 查找一个名字等同于 `$procname` 的进程。 后者是另一个对 rc.subr(8) 有意义的变量， 并且默认它的值跟 `command` 一样。 换而言之，当我们给 `command` 设置值后， `procname` 实际上也设置了同样的值。 这启动我们的脚本来杀死守护进程并检查它是否正在第一个位置运行。

  > 注意: 某些程序实际上是可执行的脚本。 系统启动脚本的解释器以传递脚本名为命令行参数的形式来运行脚本。 然后被映射到进程列表中，这会使 rc.subr(8) 迷惑。因此，当 `$command` 是一个脚本的时，你应该额外地设置 `command_interpreter` 来让 rc.subr(8) 知晓进程的实际名字。

  > 对每个 `rc.d` 脚本而言， 有一个可选的 rc.conf(5) 变量给 `command` 指示其优先级。 它的名字是下面这样的形式：`${name}_program`， `name` 是我们 之前 讨论过的必须性变量。如，在这个案例中它应该命名为 `emumbled_program`。这其实是 rc.subr(8) 分配 `${name}_program` 来改写 `command` 的。

  > 当然，即使 `command` 未被设置， sh(1) 也将允许你从 rc.conf(5) 或自身来设置 `${name}_program`。在那种情况下， `${name}_program` 的特定属性丢失了， 并且它成为了一个能供你的脚本用于其自身目的的普通变量。 然而，单独使用 `${name}_program` 是并不是我们所寄望的，因为同时使用它和 `command` 已成为了 `rc.d` 脚本编程的一个惯用的约定。

  关于默认方法的更详细的信息，请参考 rc.subr(8)。

上一页 | 起始页 | 下一页
可配置的虚拟脚本 |  | 启动并停止高级守护进程

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

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