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$ 37.\" 38.Dd December 25, 2013 39.Dt RC 8 40.Os 41.Sh NAME 42.Nm rc 43.Nd command scripts for auto-reboot and daemon startup 44.Sh SYNOPSIS 45.Nm 46.Nm rc.conf 47.Nm rc.conf.local 48.Nm rc.d/ 49.Nm rc.firewall 50.Nm rc.local 51.Nm rc.shutdown 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 61script contains commands which are pertinent only 62to a specific site. 63Typically, the 64.Pa /usr/local/etc/rc.d/ 65mechanism is used instead of 66.Nm rc.local 67these days but if 68you want to use 69.Nm rc.local , 70it is still supported. 71In this case, it should source 72.Pa /etc/rc.conf 73and contain additional custom startup code for your system. 74The best way to handle 75.Nm rc.local , 76however, is to separate it out into 77.Nm rc.d/ 78style scripts and place them under 79.Pa /usr/local/etc/rc.d/ . 80The 81.Nm rc.conf 82file contains the global system configuration information referenced 83by the startup scripts, while 84.Nm rc.conf.local 85contains the local system configuration. 86See 87.Xr rc.conf 5 88for more information. 89.Pp 90The 91.Nm rc.d/ 92directories contain scripts which will be automatically 93executed at boot time and shutdown time. 94.Ss Operation of Nm 95.Bl -enum 96.It 97If autobooting, set 98.Va autoboot Ns = Ns Li yes 99and enable a flag 100.Pq Va rc_fast Ns = Ns Li yes , 101which prevents the 102.Nm rc.d/ 103scripts from performing the check for already running processes 104(thus speeding up the boot process). 105This 106.Va rc_fast Ns = Ns Li yes 107speedup will not occur when 108.Nm 109is started up after exiting the single-user shell. 110.It 111Determine whether the system is booting diskless, 112and if so run the 113.Pa /etc/rc.initdiskless 114script. 115.It 116Source 117.Pa /etc/rc.subr 118to load various 119.Xr rc.subr 8 120shell functions to use. 121.It 122Load the configuration files. 123.It 124Determine if booting in a jail, 125and add 126.Dq Li nojail 127(no jails allowed) or 128.Dq Li nojailvnet 129(only allow vnet-enabled jails) to the list of KEYWORDS to skip in 130.Xr rcorder 8 . 131.It 132If the file 133.Va ${firstboot_sentinel} 134does not exist, add 135.Dq Li firstboot 136to the list of KEYWORDS to skip in 137.Xr rcorder 8 . 138.It 139Invoke 140.Xr rcorder 8 141to order the files in 142.Pa /etc/rc.d/ 143that do not have a 144.Dq Li nostart 145KEYWORD (refer to 146.Xr rcorder 8 Ns 's 147.Fl s 148flag). 149.It 150Call each script in turn using 151.Fn run_rc_script 152(from 153.Xr rc.subr 8 ) , 154which sets 155.Va $1 156to 157.Dq Li start , 158and sources the script in a subshell. 159If the script has a 160.Pa .sh 161suffix then it is sourced directly into the current shell. 162Stop processing when the script that is the value of the 163.Va $early_late_divider 164has been run. 165.It 166Check again to see if the file 167.Va ${firstboot_sentinel} 168exists (in case it is located on a newly mounted file system) 169and adjust the list of KEYWORDs to skip appropriately. 170.It 171Re-run 172.Xr rcorder 8 , 173this time including the scripts in the 174.Va $local_startup 175directories. 176Ignore everything up to the 177.Va $early_late_divider , 178then start executing the scripts as described above. 179.It 180If the file 181.Va ${firstboot_sentinel} 182exists, delete it. 183If the file 184.Va ${firstboot_sentinel}-reboot 185also exists (because it was created by a script), then delete it and reboot. 186.El 187.Ss Operation of Nm rc.shutdown 188.Bl -enum 189.It 190Source 191.Pa /etc/rc.subr 192to load various 193.Xr rc.subr 8 194shell functions to use. 195.It 196Load the configuration files. 197.It 198Invoke 199.Xr rcorder 8 200to order the files in 201.Pa /etc/rc.d/ 202and the 203.Va $local_startup 204directories 205that have a 206.Dq Li shutdown 207KEYWORD (refer to 208.Xr rcorder 8 Ns 's 209.Fl k 210flag), 211reverse that order, and assign the result to a variable. 212.It 213Call each script in turn using 214.Fn run_rc_script 215(from 216.Xr rc.subr 8 ) , 217which sets 218.Va $1 219to 220.Dq Li stop , 221and sources the script in a subshell. 222If the script has a 223.Pa .sh 224suffix then it is sourced directly into the current shell. 225.El 226.Ss Contents of Nm rc.d/ 227.Nm rc.d/ 228is located in 229.Pa /etc/rc.d/ . 230The following file naming conventions are currently used in 231.Nm rc.d/ : 232.Bl -tag -width ".Pa ALLUPPERCASE" -offset indent 233.It Pa ALLUPPERCASE 234Scripts that are 235.Dq placeholders 236to ensure that certain operations are performed before others. 237In order of startup, these are: 238.Bl -tag -width ".Pa NETWORKING" 239.It Pa NETWORKING 240Ensure basic network services are running, including general 241network configuration. 242.It Pa SERVERS 243Ensure basic services 244exist for services that start early (such as 245.Pa nisdomain ) , 246because they are required by 247.Pa DAEMON 248below. 249.It Pa DAEMON 250Check-point before all general purpose daemons such as 251.Pa lpd 252and 253.Pa ntpd . 254.It Pa LOGIN 255Check-point before user login services 256.Pa ( inetd 257and 258.Pa sshd ) , 259as well as services which might run commands as users 260.Pa ( cron 261and 262.Pa sendmail ) . 263.El 264.It Pa foo.sh 265Scripts that are to be sourced into the current shell rather than a subshell 266have a 267.Pa .sh 268suffix. 269Extreme care must be taken in using this, as the startup sequence will 270terminate if the script does. 271.It Pa bar 272Scripts that are sourced in a subshell. 273The boot does not stop if such a script terminates with a non-zero status, 274but a script can stop the boot if necessary by invoking the 275.Fn stop_boot 276function (from 277.Xr rc.subr 8 ) . 278.El 279.Pp 280Each script should contain 281.Xr rcorder 8 282keywords, especially an appropriate 283.Dq Li PROVIDE 284entry, and if necessary 285.Dq Li REQUIRE 286and 287.Dq Li BEFORE 288keywords. 289.Pp 290Each script is expected to support at least the following arguments, which 291are automatically supported if it uses the 292.Fn run_rc_command 293function: 294.Bl -tag -width ".Cm restart" -offset indent 295.It Cm start 296Start the service. 297This should check that the service is to be started as specified by 298.Xr rc.conf 5 . 299Also checks if the service is already running and refuses to start if 300it is. 301This latter check is not performed by standard 302.Fx 303scripts if the system is starting directly to multi-user mode, to 304speed up the boot process. 305If 306.Cm forcestart 307is given, ignore the 308.Xr rc.conf 5 309check and start anyway. 310.It Cm stop 311If the service is to be started as specified by 312.Xr rc.conf 5 , 313stop the service. 314This should check that the service is running and complain if it is not. 315If 316.Cm forcestop 317is given, ignore the 318.Xr rc.conf 5 319check and attempt to stop. 320.It Cm restart 321Perform a 322.Cm stop 323then a 324.Cm start . 325.It Cm status 326If the script starts a process (rather than performing a one-off 327operation), show the status of the process. 328Otherwise it is not necessary to support this argument. 329Defaults to displaying the process ID of the program (if running). 330.It Cm poll 331If the script starts a process (rather than performing a one-off 332operation), wait for the command to exit. 333Otherwise it is not necessary to support this argument. 334.It Cm enabled 335Return 0 if the service is enabled and 1 if it is not. 336This command does not print anything. 337.It Cm rcvar 338Display which 339.Xr rc.conf 5 340variables are used to control the startup of the service (if any). 341.El 342.Pp 343If a script must implement additional commands it can list them in 344the 345.Va extra_commands 346variable, and define their actions in a variable constructed from 347the command name (see the 348.Sx EXAMPLES 349section). 350.Pp 351The following key points apply to old-style scripts in 352.Pa /usr/local/etc/rc.d/ : 353.Bl -bullet 354.It 355Scripts are only executed if their 356.Xr basename 1 357matches the shell globbing pattern 358.Pa *.sh , 359and they are executable. 360Any other files or directories present within the directory are silently 361ignored. 362.It 363When a script is executed at boot time, it is passed the string 364.Dq Li start 365as its first and only argument. 366At shutdown time, it is passed the string 367.Dq Li stop 368as its first and only argument. 369All 370.Nm rc.d/ 371scripts are expected to handle these arguments appropriately. 372If no action needs to be taken at a given time 373(either boot time or shutdown time), 374the script should exit successfully and without producing an error message. 375.It 376The scripts within each directory are executed in lexicographical order. 377If a specific order is required, 378numbers may be used as a prefix to the existing filenames, 379so for example 380.Pa 100.foo 381would be executed before 382.Pa 200.bar ; 383without the numeric prefixes the opposite would be true. 384.It 385The output from each script is traditionally a space character, 386followed by the name of the software package being started or shut down, 387.Em without 388a trailing newline character (see the 389.Sx EXAMPLES 390section). 391.El 392.Sh SCRIPTS OF INTEREST 393When an automatic reboot is in progress, 394.Nm 395is invoked with the argument 396.Cm autoboot . 397One of the scripts run from 398.Pa /etc/rc.d/ 399is 400.Pa /etc/rc.d/fsck . 401This script runs 402.Xr fsck 8 403with option 404.Fl p 405and 406.Fl F 407to 408.Dq preen 409all the disks of minor inconsistencies resulting 410from the last system shutdown. 411If this fails, then checks/repairs of serious inconsistencies 412caused by hardware or software failure will be performed 413in the background at the end of the booting process. 414If 415.Cm autoboot 416is not set, when going from single-user to multi-user mode for example, 417the script does not do anything. 418.Pp 419The 420.Pa /etc/rc.d/local 421script can execute scripts from multiple 422.Nm rc.d/ 423directories. 424The default location includes 425.Pa /usr/local/etc/rc.d/ , 426but these may be overridden with the 427.Va local_startup 428.Xr rc.conf 5 429variable. 430.Pp 431The 432.Pa /etc/rc.d/serial 433script is used to set any special configurations for serial devices. 434.Pp 435The 436.Nm rc.firewall 437script is used to configure rules for the kernel based firewall 438service. 439It has several possible options: 440.Pp 441.Bl -tag -width ".Ar filename" -compact -offset indent 442.It Cm open 443will allow anyone in 444.It Cm client 445will try to protect just this machine 446.It Cm simple 447will try to protect a whole network 448.It Cm closed 449totally disables IP services except via 450.Pa lo0 451interface 452.It Cm UNKNOWN 453disables the loading of firewall rules 454.It Ar filename 455will load the rules in the given filename (full path required). 456.El 457.Pp 458The 459.Pa /etc/rc.d/atm* 460scripts are used to configure ATM network interfaces. 461The interfaces are configured in three passes. 462The first pass performs the initial interface configuration. 463The second pass completes the interface configuration and defines PVCs and 464permanent ATMARP entries. 465The third pass starts any ATM daemons. 466.Pp 467Most daemons, including network related daemons, have their own script in 468.Pa /etc/rc.d/ , 469which can be used to start, stop, and check the status of the service. 470.Pp 471Any architecture specific scripts, such as 472.Pa /etc/rc.d/apm 473for example, specifically check that they are on that architecture 474before starting the daemon. 475.Pp 476Following tradition, all startup files reside in 477.Pa /etc . 478.Sh FILES 479.Bl -tag -compact -width Pa 480.It Pa /etc/rc 481.It Pa /etc/rc.conf 482.It Pa /etc/rc.conf.local 483.It Pa /etc/rc.d/ 484.It Pa /etc/rc.firewall 485.It Pa /etc/rc.local 486.It Pa /etc/rc.shutdown 487.It Pa /etc/rc.subr 488.It Pa /var/run/dmesg.boot 489.Xr dmesg 8 490results soon after the 491.Nm 492process begins. 493Useful when 494.Xr dmesg 8 495buffer in the kernel no longer has this information. 496.El 497.Sh EXAMPLES 498The following is a minimal 499.Nm rc.d/ 500style script. 501Most scripts require little more than the following. 502.Bd -literal -offset indent 503#!/bin/sh 504# 505 506# PROVIDE: foo 507# REQUIRE: bar_service_required_to_precede_foo 508 509\&. /etc/rc.subr 510 511name="foo" 512rcvar=foo_enable 513command="/usr/local/bin/foo" 514 515load_rc_config $name 516run_rc_command "$1" 517.Ed 518.Pp 519Certain scripts may want to provide enhanced functionality. 520The user may access this functionality through additional commands. 521The script may list and define as many commands at it needs. 522.Bd -literal -offset indent 523#!/bin/sh 524# 525 526# PROVIDE: foo 527# REQUIRE: bar_service_required_to_precede_foo 528# BEFORE: baz_service_requiring_foo_to_precede_it 529 530\&. /etc/rc.subr 531 532name="foo" 533rcvar=foo_enable 534command="/usr/local/bin/foo" 535extra_commands="nop hello" 536hello_cmd="echo Hello World." 537nop_cmd="do_nop" 538 539do_nop() 540{ 541 echo "I do nothing." 542} 543 544load_rc_config $name 545run_rc_command "$1" 546.Ed 547.Pp 548As all processes are killed by 549.Xr init 8 550at shutdown, the explicit 551.Xr kill 1 552is unnecessary, but is often included. 553.Sh SEE ALSO 554.Xr kill 1 , 555.Xr rc.conf 5 , 556.Xr init 8 , 557.Xr rcorder 8 , 558.Xr rc.subr 8 , 559.Xr reboot 8 , 560.Xr savecore 8 561.Sh HISTORY 562The 563.Nm 564utility appeared in 565.Bx 4.0 . 566