12.2. 启动服务
许多用户在 FreeBSD 上安装了来自 Ports Collection 的第三方软件,并要求在系统初始化时启动所安装的服务。诸如 mail/postfix
或 www/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)
启动时运行,通常是在系统初始化期间。