11.4. 管理FreeBSD中的服务

Contributed by Tom Rhodes.

FreeBSD在系统初始化时使用rc(8)系统的启动Script。列于/etc/rc.d的Script提供了基本的服务可使用service(8)加上startstop以及restart选项来控制。例如,使用以下指令可以重新启动sshd(8)

# service sshd restart

这个程序可以用来在执行中的系统上启动服务,而在rc.conf(5)中有指定的服务则会在开机时自动启动。例如,要在系统启动时开启natd(8),可入下行到/etc/rc.conf

natd_enable="YES"

natd_enable=“NO”行已存在,则将NO更改为YES,在下次开机时rc(8) script便会自动加载任何相依的服务,详细如下所述。

由于rc(8)系统主要用于在系统开机与关机时启动与停止服务,只有当有服务的变数设定在/etc/rc.confstartstop以及restart才会有作用。例如sshd restart只会在/etc/rc.conf中的 sshd_enable设为YES时才会运作,若要不透过/etc/rc.conf的设定来startstoprestart一个服务则需要在指令前加上one,例如要不透过目前在/etc/rc.conf的设定重新启动sshd(8)可执行以下指令:

# service sshd onerestart

要检查一个服务是否有在/etc/rc.conf开启,可执行服务的rc(8) Script加上rcvar。这个例子会检查sshd(8)是否在/etc/rc.conf已经开启:

# service sshd rcvar
# sshd
#
sshd_enable="YES"
#   (default: "")

注意:

# sshd的输出来自上述指令,而非root console。

要判断是一个服务是否正在执行,可使用status,例如要确认sshd(8)是否正常在执行:

# service sshd status
sshd is running as pid 433.

在某些情况,也可以reload一个服务。这个动作会尝试发送一个信号给指定的服务,强制服务重新加载其配置文件,在大多数的情况下,发送给服务的信号是SIGHUP。并不是每个服务都有支持此功能。

rc(8)系统会用在网络服务及也应用在大多数的系统初化。例如执行/etc/rc.d/bgfsck Script会列印出以下信息:

在 60 秒内启动后台文件系统检查。

这个Script用来在背景做文件系统检查,只有在系统初始化时要执行。

许多系统服务会相依其他服务来运作,例如yp(8)及其他以RPC为基础的服务在rpcbind(8)服务启动前可能会启动失败。要解决这种问题,就必须在启动Script上方的注释中加入相依及其他meta-data。在系统初始化时会用rcorder(8)程序分析这些注释来决定要以什么顺序来执行系统服务以满足相依。

rc.subr(8)的需要,以下的关键字必须加入到所有的启动Script方可enable启动Script:

以下关键字可能会在每个启动Script的上方引用,虽然非必要,但是对于rcorder(8)是非常有用的提示:

透过仔细的设定每个启动Script的这些关键字,管理者便可对Script的启动顺序进行微调,而不需使用到其他UNIX®操作系统所使用的runlevels

额外的信息可在rc(8)以及rc.subr(8)中找到。请参考此文章来取得如何建立自定义rc(8) Script的操作说明。

11.4.1. 管理系统特定的设定

系统设定信息的主要位于/etc/rc.conf,这个档案的设定信息范围非常广且会在系统启动时读取来设定系统,它也提供设定信息给rc*档案使用。

/etc/rc.conf中的设定项目会覆盖在/etc/defaults/rc.conf的预设设定,不应直接编辑该档案中的预设设定,所有系统特定的设定应到/etc/rc.conf所修改。

在丛集应用时要将系统特定的设定与各站特定的设定分开,借此减少管理成本有好几种方法,建议的方法是将系统特定的设定放置在/etc/rc.conf.local,例如以下将要套用到所有系统的设定项目放在/etc/rc.conf

sshd_enable="YES"
keyrate="fast"
defaultrouter="10.1.1.254"

而只套用到此系统的设定放在/etc/rc.conf.local

hostname="node1.example.org"
ifconfig_fxp0="inet 10.1.1.1/8"

使用应用程序如rsyncpuppet/etc/rc.conf散布到每个系统,而在各系统保留自己的/etc/rc.conf.local

升级系统并不会复写/etc/rc.conf,所以系统设定信息不会因此遗失。

提示:

/etc/rc.conf以及/etc/rc.conf.local两个档案都会使用sh(1)解析,这让系统操作者能够建立较复杂的设定方案。请参考rc.conf(5)来取得更多有关此主题的信息。

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

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.