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:
#/etc/rc.d/sshd restart
This 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:
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
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 statussshd 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, 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.
By using this method, an administrator can easily control system services without the hassle of "runlevels" like some other UNIX(R) operating systems.
Additional information about the
rc.d system can be found in the rc(8)
and rc.subr(8) manual pages.
All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.