In 2002 FreeBSD integrated the NetBSD rc.d
system for system initialization. Users should notice the files
listed in the /etc/rc.d
directory. Many of these files are for basic services which can
be controlled with the start,
stop, and restart options.
For instance, sshd(8) can be restarted with the following
command:
# service sshd restartThis procedure is similar for other services. Of course,
services are usually started automatically at boot time as
specified in rc.conf(5). For example, enabling the Network
Address Translation daemon at startup is as simple as adding the
following line to /etc/rc.conf:
If a natd_enable="NO" line is already
present, then simply change the NO to
YES. The rc scripts will automatically load
any other dependent services during the next reboot, as
described below.
Since the rc.d system is primarily
intended to start/stop services at system startup/shutdown time,
the standard start, stop and
restart options will only perform their action
if the appropriate /etc/rc.conf variables
are set. For instance, sshd restart will
only work if sshd_enable is set to
YES in /etc/rc.conf.
To start, stop or
restart a service regardless of the settings in
/etc/rc.conf, the commands should be
prefixed with “one”. For instance, to restart
sshd regardless of the current
/etc/rc.conf setting, execute the following
command:
# service sshd onerestartIt is easy to check if a service is enabled in
/etc/rc.conf by running the appropriate
rc.d script with the option
rcvar. Thus, an administrator can check that
sshd is in fact enabled in
/etc/rc.conf by running:
# service sshd rcvar
# sshd
$sshd_enable=YESThe second line (# sshd) is the output
from sshd, not a
root console.
To determine whether or not a service is running, use
status. For instance, to verify that
sshd is running:
# service sshd status
sshd is running as pid 433.In some cases it is also possible to reload
a service. This will attempt to send a signal to an individual
service, forcing the service to reload its configuration files.
In most cases this means sending the service a
SIGHUP signal. Support for this feature is
not included for every service.
The rc.d system is not only used for
network services, it also contributes to most of the system
initialization. For instance, when the
bgfsck script is executed, it will print
out the following message:
Therefore this file is used for background file system checks, which are done only during system initialization.
Many system services depend on other services to function
properly. For example, NIS and other RPC-based services may
fail to start until after the rpcbind
(portmapper) service has started. To resolve this issue,
information about dependencies and other meta-data is included
in the comments at the top of each startup script. The
rcorder(8) program is then used to parse these comments
during system initialization to determine the order in which
system services should be invoked to satisfy the
dependencies.
The following words must be included in all startup scripts (they are required by rc.subr(8) to “enable” the startup script):
PROVIDE: Specifies the services this
file provides.
The following words may be included at the top of each startup file. They are not strictly necessary, but they are useful as hints to rcorder(8):
REQUIRE: Lists services which are
required for this service. This file will run
after the specified services.
BEFORE: Lists services which depend
on this service. This file will run
before the specified services.
By carefully setting these keywords for each startup script, an administrator has a very fine-grained level of control of the startup order of the scripts, without the hassle of “runlevels” like some other UNIX® operating systems.
Additional information about the rc.d
system can be found in rc(8) and rc.subr(8). Refer to
this article for
instructions on how to create custom rc.d
scripts.
This, and other documents, can be downloaded from ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/
For questions about FreeBSD, read the
documentation before
contacting <questions@FreeBSD.org>.
For questions about this documentation, e-mail <doc@FreeBSD.org>.