12.2. 启动服务

许多用户在 FreeBSD 上安装了来自 ports 的第三方软件,并要求在系统初始化时启动所安装的服务。诸如 mail/postfixwww/apache22 等服务只是众多可能在系统初始化时被启动的软件包中的两个。本节将解释如何自启动第三方软件。

在 FreeBSD 中,大多数包含的服务,例如 cron(8) ,都是通过系统启动脚本启动的。

12.2.1. 扩展应用配置

现在 FreeBSD 包含了 rc.d,使得应用程序的启动配置变得更加容易,并提供了更多的功能。通过使用本手册在《管理 FREEBSD 中的服务》 (参见:12.4. 管理 FREEBSD 中的服务)中包含的命令,应用程序可以被设置为在启动某些其他服务之后再启动,并且可以通过 /etc/rc.conf 传递额外的标志,以取代启动脚本中的硬编码标志。一个基本的启动脚本可能类似于以下内容:

#!/bin/sh
#
# PROVIDE: utility
# REQUIRE: DAEMON
# KEYWORD: shutdown

. /etc/rc.subr

name=utility
rcvar=utility_enable

command="/usr/local/sbin/utility"

load_rc_config $name

#
# DO NOT CHANGE THESE DEFAULT VALUES HERE
# SET THEM IN THE /etc/rc.conf FILE
#
utility_enable=${utility_enable-"NO"}
pidfile=${utility_pidfile-"/var/run/utility.pid"}

run_rc_command "$1"

这个脚本将确保所提供的工具将在 DAEMON 伪服务之后启动,同时还提供了一种设置和追踪进程ID(PID)的方法。

然后,这个应用程序可以在 /etc/rc.conf 中添加如下一行:

utility_enable="YES"

通过这种方法能更容易地操作命令行参数、 /etc/rc.subr 中默认函数的包含、与 rcorder(8) 的兼容,并且能通过 rc.conf 来简化配置。

12.2.2 使用服务来启动服务

其他服务可以使用 inetd(8) 来启动。inetd(8) 的工作及其配置在《30.2. inetd Super-Server》一节中有深入描述。

在某些情况下,使用 cron(8) 来启动系统服务可能更有意义,这种方法有很多优点,因为 cron(8)作为 crontab(5) 的所有者运行这些进程,这使得普通用户可以启动和维护他们自己的应用程序。

cron(8)@reboot 功能,可以用来代替时间规范,这可以使作业在 cron(8) 启动时运行,通常是在系统初始化期间。