Contributed by Tom Rhodes.
FreeBSD has recently 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:
# /etc/rc.d/sshd restart
This procedure is similar for other services. Of course, services are usually started
automatically 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:
natd_enable="YES"
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 the above sshd restart command 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 ``force''. For instance to restart sshd regardless of the
current /etc/rc.conf setting, execute the following
command:
# /etc/rc.d/sshd forcerestart
It 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:
# /etc/rc.d/sshd rcvar
# sshd
$sshd_enable=YES
Note: The second line (# sshd) is the output from
the sshd command, not a root
console.
To determine if a service is running, a status option is
available. For instance to verify that sshd is actually
started:
# /etc/rc.d/sshd status
sshd is running as pid 433.
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.
The rcNG structure is not only used for network services,
it also contributes to most of the system initialization. For instance, consider the bgfsck file. When this script is executed, it will print out the
following message:
Starting background file system checks in 60 seconds.
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
may be included at the top of each startup file:
-
PROVIDE: Specifies the services this file provides.
-
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.
-
KEYWORD: FreeBSD or NetBSD. This is used for *BSD dependent features.
By using this method, an administrator can easily control system services without the
hassle of ``runlevels'' like some other UNIX®
operating systems.
Additional information about the FreeBSD 5.X rc.d system can
be found in the rc(8) and rc.subr(8) manual
pages.