xref: /dragonfly/share/man/man8/rc.8 (revision 25a2db75)
1.\" Copyright (c) 1980, 1991, 1993
2.\"	The Regents of the University of California.  All rights reserved.
3.\"
4.\" Portions of this manual page are Copyrighted by
5.\"	The NetBSD Foundation.
6.\"
7.\" Redistribution and use in source and binary forms, with or without
8.\" modification, are permitted provided that the following conditions
9.\" are met:
10.\" 1. Redistributions of source code must retain the above copyright
11.\"    notice, this list of conditions and the following disclaimer.
12.\" 2. Redistributions in binary form must reproduce the above copyright
13.\"    notice, this list of conditions and the following disclaimer in the
14.\"    documentation and/or other materials provided with the distribution.
15.\" 3. All advertising materials mentioning features or use of this software
16.\"    must display the following acknowledgement:
17.\"	This product includes software developed by the University of
18.\"	California, Berkeley and its contributors.
19.\" 4. Neither the name of the University nor the names of its contributors
20.\"    may be used to endorse or promote products derived from this software
21.\"    without specific prior written permission.
22.\"
23.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33.\" SUCH DAMAGE.
34.\"
35.\"     @(#)rc.8	8.2 (Berkeley) 12/11/93
36.\" $FreeBSD: src/share/man/man8/rc.8,v 1.22 2002/12/12 17:25:58 ru Exp $
37.Dd September 28, 2009
38.Dt RC 8
39.Os
40.Sh NAME
41.Nm rc
42.Nd command scripts for auto-reboot and daemon startup
43.Sh SYNOPSIS
44.Nm
45.Nm rc.conf
46.Nm rc.conf.local
47.Nm rc.d/
48.Nm rc.firewall
49.Nm rc.local
50.Nm rc.shutdown
51.Nm rc.shutdown.local
52.Nm rc.subr
53.Sh DESCRIPTION
54The
55.Nm
56utility is the command script which controls the automatic boot process
57after being called by
58.Xr init 8 .
59The
60.Nm rc.local
61and
62.Nm rc.shutdown.local
63scripts contains commands which are pertinent only to a specific site.
64Typically, scripts in
65.Pa /usr/local/etc/rc.d/
66is used instead of
67.Nm rc.local
68and
69.Nm rc.shutdown.local
70these days but if you want to use them it is still supported.
71In this case, they should source
72.Pa /etc/rc.conf
73and contain additional custom startup and shutdown code for your system.
74The best way to handle
75.Nm rc.local
76and
77.Nm rc.shutdown.local ,
78however, is to separate them out into
79.Nm rc.d/
80style scripts and place them under
81.Pa /usr/local/etc/rc.d/ .
82The
83.Nm rc.conf
84file contains the global system configuration information referenced
85by the startup scripts, while
86.Nm rc.conf.local
87contains the local system configuration.
88See
89.Xr rc.conf 5
90for more information.
91.Pp
92The
93.Nm rc.d/
94directories contain scripts which will be automatically
95executed at boot time and shutdown time.
96.Ss Operation of Nm
97.Bl -enum
98.It
99Source
100.Pa /etc/rc.subr
101to load various
102.Xr rc.subr 8
103shell functions to use.
104.It
105If autobooting, set
106.Va autoboot Ns = Ns Li yes
107and enable a flag
108.Pq Va rc_fast Ns = Ns Li yes ,
109which prevents the
110.Nm rc.d/
111scripts from performing the check for already running processes
112(thus speeding up the boot process).
113This
114.Va rc_fast Ns = Ns Li yes
115speedup will not occur when
116.Nm
117is started up after exiting the single-user shell.
118.It
119Invoke
120.Xr rcorder 8
121to order the files in
122.Pa /etc/rc.d/
123that do not have a
124.Dq Li nostart
125keyword (refer to
126.Xr rcorder 8 Ns 's
127.Fl s
128flag),
129and assign the result to a variable.
130.It
131Call each script in turn using
132.Fn run_rc_script
133(from
134.Xr rc.subr 8 ) ,
135which sets
136.Va $1
137to
138.Dq Li start ,
139and sources the script in a subshell.
140If the script has a
141.Pa .sh
142suffix then it is sourced directly into the current shell.
143.El
144.Ss Operation of Nm rc.shutdown
145.Bl -enum
146.It
147Source
148.Pa /etc/rc.subr
149to load various
150.Xr rc.subr 8
151shell functions to use.
152.It
153Invoke
154.Xr rcorder 8
155to order the files in
156.Pa /etc/rc.d/
157that have a
158.Dq Li shutdown
159keyword (refer to
160.Xr rcorder 8 Ns 's
161.Fl k
162flag),
163reverse that order, and assign the result to a variable.
164.It
165Call each script in turn using
166.Fn run_rc_script
167(from
168.Xr rc.subr 8 ) ,
169which sets
170.Va $1
171to
172.Dq Li stop ,
173and sources the script in a subshell.
174If the script has a
175.Pa .sh
176suffix then it is sourced directly into the current shell.
177.El
178.Ss Contents of Nm rc.d/
179.Nm rc.d/
180is located in
181.Pa /etc/rc.d/ .
182The following file naming conventions are currently used in
183.Nm rc.d/ :
184.Bl -tag -width ".Pa ALLUPPERCASE" -offset indent
185.It Pa ALLUPPERCASE
186Scripts that are
187.Dq placeholders
188to ensure that certain operations are performed before others.
189In order of startup, these are:
190.Bl -tag -width ".Pa NETWORKING"
191.It Pa NETWORKING
192Ensure basic network services are running, including general
193network configuration
194.Pq Pa netif , routing , network_ipv6 , ppp-user .
195.It Pa SERVERS
196Ensure basic services (such as
197.Pa NETWORKING
198and
199.Pa syslogd )
200exist for services that start early (such as
201.Pa named ) ,
202because they are required by
203.Pa DAEMON
204below.
205.It Pa DAEMON
206Check-point before all general purpose daemons such as
207.Pa dhcpd , ftpd
208and
209.Pa lpd .
210.It Pa LOGIN
211Check-point before user login services
212.Pa ( inetd
213and
214.Pa sshd ) ,
215as well as services which might run commands as users
216.Pa ( cron , jail
217and
218.Pa sendmail ) .
219.El
220.It Pa foo.sh
221Scripts that are to be sourced into the current shell rather than a subshell
222have a
223.Pa .sh
224suffix.
225Extreme care must be taken in using this, as the startup sequence will
226terminate if the script does.
227.It Pa bar
228Scripts that are sourced in a subshell.
229These can stop the boot if necessary with the following shell
230commands:
231.Bd -literal -offset indent
232if [ "$autoboot" = yes ]; then
233	kill -TERM $$
234fi
235exit 1
236.Ed
237.Pp
238Note that this should be used extremely sparingly!
239.El
240.Pp
241Each script should contain
242.Xr rcorder 8
243keywords, especially an appropriate
244.Dq Li PROVIDE
245entry, and if necessary
246.Dq Li REQUIRE
247and
248.Dq Li BEFORE
249keywords.
250.Pp
251Each script is expected to support at least the following arguments, which
252are automatically supported if it uses the
253.Fn run_rc_command
254function:
255.Bl -tag -width ".Cm restart" -offset indent
256.It Cm start
257Start the service.
258This should check that the service is to be started as specified by
259.Xr rc.conf 5 .
260Also checks if the service is already running and refuses to start if
261it is.
262This latter check is not performed by standard
263.Dx
264scripts if the system is starting directly to multi-user mode, to
265speed up the boot process.
266If
267.Cm faststart
268is given, skip the PID check.
269If
270.Cm forcestart
271is given, ignore the
272.Xr rc.conf 5
273check and start anyway.
274.It Cm stop
275If the service is to be started as specified by
276.Xr rc.conf 5 ,
277stop the service.
278This should check that the service is running and complain if it is not.
279If
280.Cm forcestop
281is given, ignore the
282.Xr rc.conf 5
283check and attempt to stop.
284.It Cm restart
285Perform a
286.Cm stop
287then a
288.Cm start .
289.It Cm status
290If the script starts a process (rather than performing a one-off
291operation), show the status of the process.
292Otherwise it is not necessary to support this argument.
293Defaults to displaying the process ID of the program (if running).
294.It Cm poll
295If the script starts a process (rather than performing a one-off
296operation), wait for the command to exit.
297Otherwise it is not necessary to support this argument.
298.It Cm rcvar
299Display which
300.Xr rc.conf 5
301variables are used to control the startup of the service (if any).
302.El
303.Pp
304If a script must implement additional commands it can list them in
305the
306.Va extra_commands
307variable, and define their actions in a variable constructed from
308the command name (see the
309.Sx EXAMPLES
310section).
311.Pp
312The following key points apply to old-style scripts in
313.Pa /usr/local/etc/rc.d/ :
314.Bl -bullet
315.It
316Scripts are only executed if their
317.Xr basename 1
318matches the shell globbing pattern
319.Pa *.sh ,
320and they are executable.
321Any other files or directories present within the directory are silently
322ignored.
323.It
324When a script is executed at boot time, it is passed the string
325.Dq Li start
326as its only argument.
327At shutdown time, it is passed the string
328.Dq Li stop
329as its only argument.
330All
331.Nm rc.d/
332scripts are expected to handle these arguments appropriately.
333If no action needs to be taken at a given time
334(either boot time or shutdown time),
335the script should exit successfully and without producing an error message.
336.It
337The scripts within each directory are executed in lexicographical order.
338If a specific order is required,
339numbers may be used as a prefix to the existing filenames,
340so for example
341.Pa 100.foo
342would be executed before
343.Pa 200.bar ;
344without the numeric prefixes the opposite would be true.
345.It
346The output from each script is traditionally a space character,
347followed by the name of the software package being started or shut down,
348.Em without
349a trailing newline character (see the
350.Sx EXAMPLES
351section).
352.El
353.Sh SCRIPTS OF INTEREST
354When an automatic reboot is in progress,
355.Nm
356is invoked with the argument
357.Cm autoboot .
358One of the scripts run from
359.Pa /etc/rc.d/
360is
361.Pa /etc/rc.d/fsck .
362This script runs
363.Xr fsck 8
364with option
365.Fl p
366to
367.Dq preen
368all
369.Xr UFS 5
370file systems of minor inconsistencies resulting
371from the last system shutdown.
372If preening fails further action depends on the
373.Xr rc.conf 5
374variable
375.Va fsck_y_enable :
376if the value is
377.Dq NO
378(default)
379.Nm
380exits, if value is
381.Dq YES ,
382.Xr fsck 8
383is run with option
384.Fl y ,
385if this also fails
386.Nm
387exits.
388If
389.Cm autoboot
390is not set, when going from single-user to multi-user mode for example,
391the script does not do anything.
392.Pp
393The
394.Pa /etc/rc.d/localdaemons
395script can execute scripts from multiple
396.Nm rc.d/
397directories.
398The default locations are
399.Pa /usr/pkg/etc/rc.d/
400and
401.Pa /usr/local/etc/rc.d/ ,
402but these may be overridden with the
403.Va local_startup
404.Xr rc.conf 5
405variable.
406.Pp
407The
408.Pa /etc/rc.d/serial
409script is used to set any special configurations for serial devices.
410.Pp
411The
412.Pa /etc/rc.d/{net*,routing}
413scripts are used to start the network.
414The network is started in several passes.
415The first pass,
416.Pa /etc/rc.d/netif ,
417configures the network
418interfaces.
419The
420.Pa /etc/rc.d/routing
421script starts routing and sets routing options.
422The
423.Pa /etc/rc.d/netoptions
424script sets additional networking options.
425Finally, the
426.Pa /etc/rc.d/network_ipv6
427script configures IPv6 interfaces and options.
428.Pp
429The
430.Nm rc.firewall
431script is used to configure rules for the
432.Xr ipfw 4
433kernel based firewall
434service.
435It has several possible options:
436.Pp
437.Bl -tag -width ".Ar filename" -compact -offset indent
438.It Cm open
439will allow anyone in
440.It Cm client
441will try to protect just this machine
442.It Cm simple
443will try to protect a whole network
444.It Cm closed
445totally disables IP services except via
446.Pa lo0
447interface
448.It Cm UNKNOWN
449disables the loading of firewall rules
450.It Ar filename
451will load the rules in the given filename (full path required).
452.El
453.Pp
454The
455.Pa /etc/rc.d/atm*
456scripts are used to configure ATM network interfaces.
457The interfaces are configured in three passes.
458The first pass performs the initial interface configuration.
459The second pass completes the interface configuration and defines PVCs and
460permanent ATMARP entries.
461The third pass starts any ATM daemons.
462.Pp
463Most daemons, including network related daemons, have their own script in
464.Pa /etc/rc.d/ ,
465which can be used to start, stop, and check the status of the service.
466.Pp
467Any architecture specific scripts, such as
468.Pa /etc/rc.d/apm
469for example, specifically check that they are on that architecture
470before starting the daemon.
471.Pp
472Following tradition, all startup files reside in
473.Pa /etc .
474.Sh FILES
475.Bl -tag -compact -width ".Pa /etc/rc.shutdown.local"
476.It Pa /etc/rc
477.It Pa /etc/rc.conf
478.It Pa /etc/rc.conf.local
479.It Pa /etc/rc.d/
480.It Pa /etc/rc.firewall
481.It Pa /etc/rc.local
482.It Pa /etc/rc.shutdown
483.It Pa /etc/rc.shutdown.local
484.It Pa /etc/rc.subr
485.El
486.Sh EXAMPLES
487The following is a minimal
488.Nm rc.d/
489style script.
490Most scripts require little more than the following.
491.Bd -literal -offset indent
492#!/bin/sh
493#
494
495# PROVIDE: foo
496# REQUIRE: bar_service_required_to_precede_foo
497# BEFORE:  baz_service_requiring_foo_to_precede_it
498
499\&. /etc/rc.subr
500
501name="foo"
502rcvar=`set_rcvar`
503command="/usr/local/bin/foo"
504
505load_rc_config $name
506run_rc_command "$1"
507.Ed
508.Pp
509Certain scripts may want to provide enhanced functionality.
510The user may access this functionality through additional commands.
511The script may list and define as many commands at it needs.
512.Bd -literal -offset indent
513#!/bin/sh
514#
515
516# PROVIDE: foo
517# REQUIRE: bar_service_required_to_precede_foo
518# BEFORE:  baz_service_requiring_foo_to_precede_it
519
520\&. /etc/rc.subr
521
522name="foo"
523rcvar=`set_rcvar`
524command="/usr/local/bin/foo"
525extra_commands="nop hello"
526hello_cmd="echo Hello World."
527nop_cmd="do_nop"
528
529do_nop()
530{
531	echo "I do nothing."
532}
533
534load_rc_config $name
535run_rc_command "$1"
536.Ed
537.Pp
538The following is a simple, hypothetical example of an old-style
539.Pa /usr/local/etc/rc.d/
540script,
541which would start a daemon at boot time,
542and kill it at shutdown time.
543.Bd -literal -offset indent
544#!/bin/sh -
545#
546#    initialization/shutdown script for foobar package
547
548case "$1" in
549start)
550	/usr/local/sbin/foo -d && echo -n ' foo'
551	;;
552stop)
553	kill `cat /var/run/foo.pid` && echo -n ' foo'
554	;;
555*)
556	echo "unknown option: $1 - should be 'start' or 'stop'" >&2
557	;;
558esac
559.Ed
560.Pp
561As all processes are killed by
562.Xr init 8
563at shutdown, the explicit
564.Xr kill 1
565is unnecessary, but is often included.
566.Sh SEE ALSO
567.Xr kill 1 ,
568.Xr ipfw 4 ,
569.Xr rc.conf 5 ,
570.Xr init 8 ,
571.Xr rcorder 8 ,
572.Xr rcrun 8 ,
573.Xr rc.subr 8 ,
574.Xr reboot 8 ,
575.Xr savecore 8
576.Sh HISTORY
577The
578.Nm
579utility appeared in
580.Bx 4.0 .
581The
582.Nm rc.d/
583facility was implemented in
584.Nx 1.5
585and appeared in
586.Dx 1.0 .
587