1be0696c1SRobert Garrett.\" $NetBSD: rc.subr.8,v 1.9 2002/07/08 16:14:55 atatat Exp $ 2be0696c1SRobert Garrett.\" $FreeBSD: src/share/man/man8/rc.subr.8,v 1.3 2003/04/22 05:13:55 dougb Exp $ 3*80d66f6bSSascha Wildner.\" $DragonFly: src/share/man/man8/rc.subr.8,v 1.4 2007/06/23 09:37:24 swildner Exp $ 4be0696c1SRobert Garrett.\" Copyright (c) 2002 The NetBSD Foundation, Inc. 5be0696c1SRobert Garrett.\" All rights reserved. 6be0696c1SRobert Garrett.\" 7be0696c1SRobert Garrett.\" This code is derived from software contributed to The NetBSD Foundation 8be0696c1SRobert Garrett.\" by Luke Mewburn. 9be0696c1SRobert Garrett.\" 10be0696c1SRobert Garrett.\" Redistribution and use in source and binary forms, with or without 11be0696c1SRobert Garrett.\" modification, are permitted provided that the following conditions 12be0696c1SRobert Garrett.\" are met: 13be0696c1SRobert Garrett.\" 1. Redistributions of source code must retain the above copyright 14be0696c1SRobert Garrett.\" notice, this list of conditions and the following disclaimer. 15be0696c1SRobert Garrett.\" 2. Redistributions in binary form must reproduce the above copyright 16be0696c1SRobert Garrett.\" notice, this list of conditions and the following disclaimer in the 17be0696c1SRobert Garrett.\" documentation and/or other materials provided with the distribution. 18be0696c1SRobert Garrett.\" 3. All advertising materials mentioning features or use of this software 19be0696c1SRobert Garrett.\" must display the following acknowledgement: 20be0696c1SRobert Garrett.\" This product includes software developed by the NetBSD 21be0696c1SRobert Garrett.\" Foundation, Inc. and its contributors. 22be0696c1SRobert Garrett.\" 4. Neither the name of The NetBSD Foundation nor the names of its 23be0696c1SRobert Garrett.\" contributors may be used to endorse or promote products derived 24be0696c1SRobert Garrett.\" from this software without specific prior written permission. 25be0696c1SRobert Garrett.\" 26be0696c1SRobert Garrett.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 27be0696c1SRobert Garrett.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 28be0696c1SRobert Garrett.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 29be0696c1SRobert Garrett.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 30be0696c1SRobert Garrett.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 31be0696c1SRobert Garrett.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 32be0696c1SRobert Garrett.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 33be0696c1SRobert Garrett.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 34be0696c1SRobert Garrett.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 35be0696c1SRobert Garrett.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 36be0696c1SRobert Garrett.\" POSSIBILITY OF SUCH DAMAGE. 37be0696c1SRobert Garrett.\" 38be0696c1SRobert Garrett.Dd April 18, 2002 39be0696c1SRobert Garrett.Dt RC.SUBR 8 40be0696c1SRobert Garrett.Os 41be0696c1SRobert Garrett.Sh NAME 42be0696c1SRobert Garrett.Nm rc.subr 43be0696c1SRobert Garrett.Nd functions used by system shell scripts 44be0696c1SRobert Garrett.Sh SYNOPSIS 45be0696c1SRobert Garrett.Bl -item 46be0696c1SRobert Garrett.It 47be0696c1SRobert Garrett.Li . /etc/rc.subr 48be0696c1SRobert Garrett.It 49be0696c1SRobert Garrett.Ic backup_file Ar action Ar file Ar current Ar backup 50be0696c1SRobert Garrett.It 51be0696c1SRobert Garrett.Ic checkyesno Ar var 52be0696c1SRobert Garrett.It 53be0696c1SRobert Garrett.Ic check_pidfile Ar pidfile Ar procname Op Ar interpreter 54be0696c1SRobert Garrett.It 55be0696c1SRobert Garrett.Ic check_process Ar procname Op Ar interpreter 56be0696c1SRobert Garrett.It 57be0696c1SRobert Garrett.Ic debug Ar message 58be0696c1SRobert Garrett.It 59be0696c1SRobert Garrett.Ic err Ar exitval Ar message 60be0696c1SRobert Garrett.It 61be0696c1SRobert Garrett.Ic force_depend Ar name 62be0696c1SRobert Garrett.It 63be0696c1SRobert Garrett.Ic info Ar message 64be0696c1SRobert Garrett.It 65be0696c1SRobert Garrett.Ic load_rc_config Ar command 66be0696c1SRobert Garrett.It 67be0696c1SRobert Garrett.Ic mount_critical_filesystems Ar type 68be0696c1SRobert Garrett.It 69be0696c1SRobert Garrett.Ic rc_usage Ar command Op Ar ... 70be0696c1SRobert Garrett.It 71be0696c1SRobert Garrett.Ic reverse_list Ar item Op Ar ... 72be0696c1SRobert Garrett.It 73be0696c1SRobert Garrett.Ic run_rc_command Ar argument 74be0696c1SRobert Garrett.It 75be0696c1SRobert Garrett.Ic run_rc_script Ar file Ar argument 76be0696c1SRobert Garrett.It 77be0696c1SRobert Garrett.Ic set_rcvar Op Ar base 78be0696c1SRobert Garrett.It 79be0696c1SRobert Garrett.Ic wait_for_pids Op Ar pid Op Ar ... 80be0696c1SRobert Garrett.It 81be0696c1SRobert Garrett.Ic warn Ar message 82be0696c1SRobert Garrett.El 83be0696c1SRobert Garrett.Sh DESCRIPTION 84be0696c1SRobert Garrett.Nm 85be0696c1SRobert Garrettcontains commonly used shell script functions and variable 86be0696c1SRobert Garrettdefinitions which are used by various scripts such as 87be0696c1SRobert Garrett.Xr rc 8 . 88be0696c1SRobert GarrettScripts required by ports in 89be0696c1SRobert Garrett.Pa /usr/local/etc/rc.d 90be0696c1SRobert Garrettwill also eventually 91be0696c1SRobert Garrettbe rewritten to make use of it. 92be0696c1SRobert Garrett.Pp 93be0696c1SRobert GarrettThe 94be0696c1SRobert Garrett.Nm 95be0696c1SRobert Garrettfunctions were mostly imported from 96be0696c1SRobert Garrett.Nx 97be0696c1SRobert Garrettand it is intended that they remain synced between the 98be0696c1SRobert Garretttwo projects. With that in mind there are several variable 99be0696c1SRobert Garrettdefinitions that can help in this regard. They are: 100be0696c1SRobert Garrett.Bl -tag -width 4n 101be0696c1SRobert Garrett.It Ic OSTYPE 102be0696c1SRobert GarrettIts value will be either 1039bb2a92dSHiten Pandya.Dx Ns , 1049bb2a92dSHiten Pandya.Fx Ns , 105be0696c1SRobert Garrettor 106be0696c1SRobert Garrett.Nx , 107be0696c1SRobert Garrettdepending on which OS it is running on. 108be0696c1SRobert Garrett.It Ic SYSCTL 109be0696c1SRobert GarrettThe path to the 110be0696c1SRobert Garrett.Xr sysctl 8 111be0696c1SRobert Garrettcommand. 112be0696c1SRobert Garrett.It Ic SYSCTL_N 113be0696c1SRobert GarrettThe path and argument list to display only the 114be0696c1SRobert Garrett.Xr sysctl 8 115be0696c1SRobert Garrettvalues instead of a name=value pair. 116be0696c1SRobert Garrett.It Ic SYSCTL_W 117be0696c1SRobert GarrettThe path and argument to write or modify 118be0696c1SRobert Garrett.Xr sysctl 8 119be0696c1SRobert Garrettvalues. 120be0696c1SRobert Garrett.El 121be0696c1SRobert Garrett.Pp 122be0696c1SRobert GarrettThe 123be0696c1SRobert Garrett.Nm 124be0696c1SRobert Garrettfunctions are accessed by sourcing 125be0696c1SRobert Garrett.Pa /etc/rc.subr 126be0696c1SRobert Garrettinto the current shell. 127be0696c1SRobert Garrett.Pp 128be0696c1SRobert GarrettThe following shell functions are available: 129be0696c1SRobert Garrett.Bl -tag -width 4n 130be0696c1SRobert Garrett.It Xo 131be0696c1SRobert Garrett.Ic backup_file Ar action Ar file Ar current Ar backup 132be0696c1SRobert Garrett.Xc 133be0696c1SRobert GarrettMake a backup copy of 134be0696c1SRobert Garrett.Ar file 135be0696c1SRobert Garrettinto 136be0696c1SRobert Garrett.Ar current . 137be0696c1SRobert GarrettIf the 138be0696c1SRobert Garrett.Xr rc.conf 5 139be0696c1SRobert Garrettvariable 140be0696c1SRobert Garrett.Sy backup_uses_rcs 141be0696c1SRobert Garrettis 142be0696c1SRobert Garrett.Sq YES , 143be0696c1SRobert Garrettuse 144be0696c1SRobert Garrett.Xr rcs 1 145be0696c1SRobert Garrettto archive the previous version of 146be0696c1SRobert Garrett.Ar current , 147be0696c1SRobert Garrettotherwise save the previous version of 148be0696c1SRobert Garrett.Ar current 149be0696c1SRobert Garrettas 150be0696c1SRobert Garrett.Ar backup . 151be0696c1SRobert Garrett.Pp 152be0696c1SRobert Garrett.Ar action 153be0696c1SRobert Garrettmay be one of the following: 154be0696c1SRobert Garrett.Bl -tag -width remove 155be0696c1SRobert Garrett.It Sy add 156be0696c1SRobert Garrett.Ar file 157be0696c1SRobert Garrettis now being backed up by or possibly re-entered into this backup mechanism. 158be0696c1SRobert Garrett.Ar current 159be0696c1SRobert Garrettis created, and if necessary, the 160be0696c1SRobert Garrett.Xr rcs 1 161be0696c1SRobert Garrettfiles are created as well. 162be0696c1SRobert Garrett.It Sy update 163be0696c1SRobert Garrett.Ar file 164be0696c1SRobert Garretthas changed and needs to be backed up. 165be0696c1SRobert GarrettIf 166be0696c1SRobert Garrett.Ar current 167be0696c1SRobert Garrettexists, it is copied to 168be0696c1SRobert Garrett.Ar backup 169be0696c1SRobert Garrettor checked into 170be0696c1SRobert Garrett.Xr rcs 1 171be0696c1SRobert Garrett(if the repository file is old), 172be0696c1SRobert Garrettand then 173be0696c1SRobert Garrett.Ar file 174be0696c1SRobert Garrettis copied to 175be0696c1SRobert Garrett.Ar current . 176be0696c1SRobert Garrett.It Sy remove 177be0696c1SRobert Garrett.Ar file 178be0696c1SRobert Garrettis no longer being tracked by this backup mechanism. 179be0696c1SRobert GarrettIf 180be0696c1SRobert Garrett.Xr rcs 1 181be0696c1SRobert Garrettis being used, an empty file is checked in and 182be0696c1SRobert Garrett.Ar current 183be0696c1SRobert Garrettis removed, 184be0696c1SRobert Garrettotherwise 185be0696c1SRobert Garrett.Ar current 186be0696c1SRobert Garrettis moved to 187be0696c1SRobert Garrett.Ar backup . 188be0696c1SRobert Garrett.El 189be0696c1SRobert Garrett.It Ic checkyesno Ar var 190be0696c1SRobert GarrettReturn 0 if 191be0696c1SRobert Garrett.Ar var 192be0696c1SRobert Garrettis defined to 193be0696c1SRobert Garrett.Sq YES , 194be0696c1SRobert Garrett.Sq TRUE , 195be0696c1SRobert Garrett.Sq ON , 196be0696c1SRobert Garrettor 197be0696c1SRobert Garrett.Sq 1 . 198be0696c1SRobert GarrettReturn 1 if 199be0696c1SRobert Garrett.Ar var 200be0696c1SRobert Garrettis defined to 201be0696c1SRobert Garrett.Sq NO , 202be0696c1SRobert Garrett.Sq FALSE , 203be0696c1SRobert Garrett.Sq OFF , 204be0696c1SRobert Garrettor 205be0696c1SRobert Garrett.Sq 0 . 206be0696c1SRobert GarrettOtherwise, warn that 207be0696c1SRobert Garrett.Ar var 208be0696c1SRobert Garrettis not set correctly. 209be0696c1SRobert GarrettThe values are case insensitive. 210be0696c1SRobert Garrett.It Xo 211be0696c1SRobert Garrett.Ic check_pidfile 212be0696c1SRobert Garrett.Ar pidfile 213be0696c1SRobert Garrett.Ar procname 214be0696c1SRobert Garrett.Op Ar interpreter 215be0696c1SRobert Garrett.Xc 216be0696c1SRobert GarrettParses the first word of the first line of 217be0696c1SRobert Garrett.Ar pidfile 218be0696c1SRobert Garrettfor a PID, and ensures that the process with that PID 219be0696c1SRobert Garrettis running and its first argument matches 220be0696c1SRobert Garrett.Ar procname . 22183edae5dSSascha WildnerPrints the matching PID if successful, otherwise nothing. 222be0696c1SRobert GarrettIf 223be0696c1SRobert Garrett.Ar interpreter 224be0696c1SRobert Garrettis provided, parse the first line of 225be0696c1SRobert Garrett.Ar procname , 226be0696c1SRobert Garrettensure that the line is of the form 227be0696c1SRobert Garrett.Dl #! interpreter [...] 228be0696c1SRobert Garrettand use 229be0696c1SRobert Garrett.Ar interpreter 230be0696c1SRobert Garrettwith its optional arguments and 231be0696c1SRobert Garrett.Ar procname 232be0696c1SRobert Garrettappended as the process string to search for. 233be0696c1SRobert Garrett.It Ic check_process Ar procname Op Ar interpreter 234be0696c1SRobert GarrettPrints the PIDs of any processes that are running with a first 235be0696c1SRobert Garrettargument that matches 236be0696c1SRobert Garrett.Ar procname . 237be0696c1SRobert Garrett.Ar interpreter 238be0696c1SRobert Garrettis handled as per 239be0696c1SRobert Garrett.Ic check_pidfile . 240be0696c1SRobert Garrett.It Ic debug Ar message 241be0696c1SRobert GarrettDisplay a debugging message to 242be0696c1SRobert Garrett.Em stderr , 243be0696c1SRobert Garrettlog it to the system log using 244be0696c1SRobert Garrett.Xr logger 1 , 245be0696c1SRobert Garrettand 246be0696c1SRobert Garrettreturn to the caller. 247be0696c1SRobert GarrettThe error message consists of the script name 248be0696c1SRobert Garrett(from 249be0696c1SRobert Garrett.Sy $0 ) , 250be0696c1SRobert Garrettfollowed by 251be0696c1SRobert Garrett.Dq ": DEBUG: " , 252be0696c1SRobert Garrettand then 253be0696c1SRobert Garrett.Ar message . 254be0696c1SRobert GarrettThis function is intended to be used by developers 255be0696c1SRobert Garrettas an aid to debugging scripts. It can be turned on or off 256be0696c1SRobert Garrettby the 257be0696c1SRobert Garrett.Xr rc.conf 5 258be0696c1SRobert Garrettvariable 259*80d66f6bSSascha Wildner.Va rc_debug . 260be0696c1SRobert Garrett.It Ic err Ar exitval Ar message 261be0696c1SRobert GarrettDisplay an error message to 262be0696c1SRobert Garrett.Em stderr , 263be0696c1SRobert Garrettlog it to the system log 264be0696c1SRobert Garrettusing 265be0696c1SRobert Garrett.Xr logger 1 , 266be0696c1SRobert Garrettand 267be0696c1SRobert Garrett.Cm exit 268be0696c1SRobert Garrettwith an exit value of 269be0696c1SRobert Garrett.Ar exitval . 270be0696c1SRobert GarrettThe error message consists of the script name 271be0696c1SRobert Garrett(from 272be0696c1SRobert Garrett.Sy $0 ) , 273be0696c1SRobert Garrettfollowed by 274be0696c1SRobert Garrett.Dq ": ERROR: " , 275be0696c1SRobert Garrettand then 276be0696c1SRobert Garrett.Ar message . 277be0696c1SRobert Garrett.It Ic force_depend name 278be0696c1SRobert GarrettOutput an advisory message and force the 279be0696c1SRobert Garrett.Ar name 280be0696c1SRobert Garrettservice to start. The 281be0696c1SRobert Garrett.Ar name 282be0696c1SRobert Garrettargument is the 283be0696c1SRobert Garrett.Xr basename 1 , 284be0696c1SRobert Garrettcomponent of the path to the script, usually 285be0696c1SRobert Garrett.Em /etc/rc.d/name . 286be0696c1SRobert GarrettIf the script fails for any reason it will output a warning 287be0696c1SRobert Garrettand return with a return value of 1. If it was successful 288be0696c1SRobert Garrettit will return 0. 289be0696c1SRobert Garrett.It Ic info Ar message 290be0696c1SRobert GarrettDisplay an informational message to 291be0696c1SRobert Garrett.Em stdout , 292be0696c1SRobert Garrettand log it to the system log using 293be0696c1SRobert Garrett.Xr logger 1 . 294be0696c1SRobert GarrettThe message consists of the script name 295be0696c1SRobert Garrett(from 296be0696c1SRobert Garrett.Sy $0 ) , 297be0696c1SRobert Garrettfollowed by 298be0696c1SRobert Garrett.Dq ": INFO: " , 299be0696c1SRobert Garrettand then 300be0696c1SRobert Garrett.Ar message . 301be0696c1SRobert GarrettThe display of this informational output can be 302be0696c1SRobert Garrettturned on or off by the 303be0696c1SRobert Garrett.Xr rc.conf 5 304be0696c1SRobert Garrettvariable 305*80d66f6bSSascha Wildner.Va rc_info . 306be0696c1SRobert Garrett.It Ic load_rc_config Ar command 307be0696c1SRobert GarrettSource in the configuration files for 308be0696c1SRobert Garrett.Ar command . 309be0696c1SRobert GarrettFirst, 310be0696c1SRobert Garrett.Pa /etc/rc.conf 311be0696c1SRobert Garrettis sourced if it has not yet been read in. 312be0696c1SRobert GarrettThen, 313be0696c1SRobert Garrett.Pa /etc/rc.conf.d/ Ns Ar command 314be0696c1SRobert Garrettis sourced if it is an existing file. 315be0696c1SRobert GarrettThe latter may also contain other variable assignments to override 316be0696c1SRobert Garrett.Ic run_rc_command 317be0696c1SRobert Garrettarguments defined by the calling script, to provide an easy 318be0696c1SRobert Garrettmechanism for an administrator to override the behaviour of a given 319be0696c1SRobert Garrett.Xr rc.d 8 320be0696c1SRobert Garrettscript without requiring the editing of that script. 321be0696c1SRobert Garrett.It Ic mount_critical_filesystems Ar type 322be0696c1SRobert GarrettGo through a list of critical file systems, 323be0696c1SRobert Garrettas found in the 324be0696c1SRobert Garrett.Xr rc.conf 5 325be0696c1SRobert Garrettvariable 326be0696c1SRobert Garrett.Sy critical_filesystems_ Ns Ar type , 327be0696c1SRobert Garrettmounting each one that 328be0696c1SRobert Garrettis not currently mounted. 329be0696c1SRobert Garrett.It Ic rc_usage Ar command Op Ar ... 330be0696c1SRobert GarrettPrint a usage message for 331be0696c1SRobert Garrett.Sy $0 , 332be0696c1SRobert Garrettwith 333be0696c1SRobert Garrett.Ar commands 334be0696c1SRobert Garrettbeing the list of valid arguments 335be0696c1SRobert Garrettprefixed by 336be0696c1SRobert Garrett.Dq "[fast|force]" . 337be0696c1SRobert Garrett.It Ic reverse_list Ar item Op Ar ... 338be0696c1SRobert GarrettPrint the list of 339be0696c1SRobert Garrett.Ar items 340be0696c1SRobert Garrettin reverse order. 341be0696c1SRobert Garrett.It Ic run_rc_command Ar argument 342be0696c1SRobert GarrettRun the 343be0696c1SRobert Garrett.Ar argument 344be0696c1SRobert Garrettmethod for the current 345be0696c1SRobert Garrett.Xr rc.d 8 346be0696c1SRobert Garrettscript, based on the settings of various shell variables. 347be0696c1SRobert Garrett.Ic run_rc_command 348be0696c1SRobert Garrettis extremely flexible, and allows fully functional 349be0696c1SRobert Garrett.Xr rc.d 8 350be0696c1SRobert Garrettscripts to be implemented in a small amount of shell code. 351be0696c1SRobert Garrett.Pp 352be0696c1SRobert Garrett.Ar argument 353be0696c1SRobert Garrettis searched for in the list of supported commands, which may be one 354be0696c1SRobert Garrettof: 355be0696c1SRobert Garrett.Dl start stop restart rcvar 356be0696c1SRobert Garrettas well as any word listed in the optional variable 357be0696c1SRobert Garrett.Sy extra_commands . 358be0696c1SRobert GarrettIf 359be0696c1SRobert Garrett.Sy pidfile 360be0696c1SRobert Garrettor 361be0696c1SRobert Garrett.Sy procname 362be0696c1SRobert Garrettis set, also allow: 363be0696c1SRobert Garrett.Dl status poll 364be0696c1SRobert Garrett.Pp 365be0696c1SRobert Garrett.Ar argument 366be0696c1SRobert Garrettmay have one of the following prefixes which alters its operation: 367be0696c1SRobert Garrett.Bl -tag -width "Prefix" -offset indent -compact 368be0696c1SRobert Garrett.It Sy Prefix 369be0696c1SRobert Garrett.Sy Operation 370be0696c1SRobert Garrett.It Li fast 371be0696c1SRobert GarrettSkip the check for an existing running process, 372be0696c1SRobert Garrettand sets 373be0696c1SRobert Garrett.Sy rc_fast=YES . 374be0696c1SRobert Garrett.It Li force 375be0696c1SRobert GarrettSkip the checks for 376be0696c1SRobert Garrett.Sy rcvar 377be0696c1SRobert Garrettbeing set to yes, 378be0696c1SRobert Garrettand sets 379be0696c1SRobert Garrett.Sy rc_force=YES . 380be0696c1SRobert GarrettThis ignores 381be0696c1SRobert Garrett.Ar argument Ns Sy _precmd 382be0696c1SRobert Garrettreturning non-zero, and ignores any of the 383be0696c1SRobert Garrett.Sy required_* 384be0696c1SRobert Garretttests failing . 385be0696c1SRobert Garrett.El 386be0696c1SRobert Garrett.Pp 387be0696c1SRobert Garrett.Ic run_rc_command 388be0696c1SRobert Garrettuses the following shell variables to control its behaviour. 389be0696c1SRobert GarrettUnless otherwise stated, these are optional. 390be0696c1SRobert Garrett.Bl -tag -width procname -offset indent 391be0696c1SRobert Garrett.It Sy name 392be0696c1SRobert GarrettThe name of this script. 393be0696c1SRobert GarrettThis is not optional. 394be0696c1SRobert Garrett.It Sy rcvar 395be0696c1SRobert GarrettThe value of 396be0696c1SRobert Garrett.Sy rcvar 397be0696c1SRobert Garrettis checked with 398be0696c1SRobert Garrett.Ic checkyesno 399be0696c1SRobert Garrettto determine if this method should be run. 400be0696c1SRobert Garrett.It Sy command 401be0696c1SRobert GarrettFull path to the command. 402be0696c1SRobert GarrettNot required if 403be0696c1SRobert Garrett.Ar argument Ns Sy _cmd 404be0696c1SRobert Garrettis defined for each supported keyword. 405be0696c1SRobert Garrett.It Sy command_args 406be0696c1SRobert GarrettOptional arguments and/or shell directives for 407be0696c1SRobert Garrett.Sy command . 408be0696c1SRobert Garrett.It Sy command_interpreter 409be0696c1SRobert Garrett.Sy command 410be0696c1SRobert Garrettis started with 411be0696c1SRobert Garrett.Dl #! command_interpreter [...] 412be0696c1SRobert Garrettwhich results in its 413be0696c1SRobert Garrett.Xr ps 1 414be0696c1SRobert Garrettcommand being 415be0696c1SRobert Garrett.Dl command_interpreter [...] command 416be0696c1SRobert Garrettso use that string to find the PID(s) of the running command 417be0696c1SRobert Garrettrather than 418be0696c1SRobert Garrett.Ql command . 419be0696c1SRobert Garrett.It Sy extra_commands 420be0696c1SRobert GarrettExtra commands/keywords/arguments supported. 421be0696c1SRobert Garrett.It Sy pidfile 422be0696c1SRobert GarrettPath to pid file. 423be0696c1SRobert GarrettUsed to determine the PID(s) of the running command. 424be0696c1SRobert GarrettIf 425be0696c1SRobert Garrett.Sy pidfile 426be0696c1SRobert Garrettis set, use 427be0696c1SRobert Garrett.Dl check_pidfile $pidfile $procname 428be0696c1SRobert Garrettto find the PID. 429be0696c1SRobert GarrettOtherwise, if 430be0696c1SRobert Garrett.Sy command 431be0696c1SRobert Garrettis set, use 432be0696c1SRobert Garrett.Dl check_process $procname 433be0696c1SRobert Garrettto find the PID. 434be0696c1SRobert Garrett.It Sy procname 435be0696c1SRobert GarrettProcess name to check for. 436be0696c1SRobert GarrettDefaults to the value of 437be0696c1SRobert Garrett.Sy command . 438be0696c1SRobert Garrett.It Sy required_dirs 439be0696c1SRobert GarrettCheck for the existence of the listed directories 440be0696c1SRobert Garrettbefore running the default start method. 441be0696c1SRobert Garrett.It Sy required_files 442be0696c1SRobert GarrettCheck for the readability of the listed files 443be0696c1SRobert Garrettbefore running the default start method. 444be0696c1SRobert Garrett.It Sy required_vars 445be0696c1SRobert GarrettPerform 446be0696c1SRobert Garrett.Ic checkyesno 447be0696c1SRobert Garretton each of the list variables 448be0696c1SRobert Garrettbefore running the default start method. 449be0696c1SRobert Garrett.It Sy ${name}_chdir 450be0696c1SRobert GarrettDirectory to 451be0696c1SRobert Garrett.Ic cd 452be0696c1SRobert Garrettto before running 453be0696c1SRobert Garrett.Sy command , 454be0696c1SRobert Garrettif 455be0696c1SRobert Garrett.Sy ${name}_chroot 456be0696c1SRobert Garrettis not provided. 457be0696c1SRobert Garrett.It Sy ${name}_chroot 458be0696c1SRobert GarrettDirectory to 459be0696c1SRobert Garrett.Xr chroot 8 460be0696c1SRobert Garrettto before running 461be0696c1SRobert Garrett.Sy command . 462be0696c1SRobert GarrettOnly supported after 463be0696c1SRobert Garrett.Pa /usr 464be0696c1SRobert Garrettis mounted. 465be0696c1SRobert Garrett.It Sy ${name}_flags 466be0696c1SRobert GarrettArguments to call 467be0696c1SRobert Garrett.Sy command 468be0696c1SRobert Garrettwith. 469be0696c1SRobert GarrettThis is usually set in 470be0696c1SRobert Garrett.Xr rc.conf 5 , 471be0696c1SRobert Garrettand not in the 472be0696c1SRobert Garrett.Xr rc.d 8 473be0696c1SRobert Garrettscript. 474be0696c1SRobert GarrettThe environment variable 475be0696c1SRobert Garrett.Sq Ev flags 476be0696c1SRobert Garrettcan be used to override this. 477be0696c1SRobert Garrett.It Sy ${name}_nice 478be0696c1SRobert Garrett.Xr nice 1 479be0696c1SRobert Garrettlevel to run 480be0696c1SRobert Garrett.Sy command 481be0696c1SRobert Garrettas. 482be0696c1SRobert GarrettOnly supported after 483be0696c1SRobert Garrett.Pa /usr 484be0696c1SRobert Garrettis mounted. 485be0696c1SRobert Garrett.It Sy ${name}_user 486be0696c1SRobert GarrettUser to run 487be0696c1SRobert Garrett.Sy command 488be0696c1SRobert Garrettas, using 489be0696c1SRobert Garrett.Xr chroot 8 . 490be0696c1SRobert Garrettif 491be0696c1SRobert Garrett.Sy ${name}_chroot 492be0696c1SRobert Garrettis set, otherwise 493be0696c1SRobert Garrettuses 494be0696c1SRobert Garrett.Xr su 1 . 495be0696c1SRobert GarrettOnly supported after 496be0696c1SRobert Garrett.Pa /usr 497be0696c1SRobert Garrettis mounted. 498be0696c1SRobert Garrett.It Sy ${name}_group 499be0696c1SRobert GarrettGroup to run the chrooted 500be0696c1SRobert Garrett.Sy command 501be0696c1SRobert Garrettas. 502be0696c1SRobert Garrett.It Sy ${name}_groups 503be0696c1SRobert GarrettComma separated list of supplementary groups to run the chrooted 504be0696c1SRobert Garrett.Sy command 505be0696c1SRobert Garrettwith. 506be0696c1SRobert Garrett.It Ar argument Ns Sy _cmd 507be0696c1SRobert GarrettShell commands which override the default method for 508be0696c1SRobert Garrett.Ar argument . 509be0696c1SRobert Garrett.It Ar argument Ns Sy _precmd 510be0696c1SRobert GarrettShell commands to run just before running 511be0696c1SRobert Garrett.Ar argument Ns Sy _cmd 512be0696c1SRobert Garrettor the default method for 513be0696c1SRobert Garrett.Ar argument . 514be0696c1SRobert GarrettIf this returns a non-zero exit code, the main method is not performed. 515be0696c1SRobert GarrettIf the default method is being executed, this check is performed after 516be0696c1SRobert Garrettthe 517be0696c1SRobert Garrett.Sy required_* 518be0696c1SRobert Garrettchecks and process (non-)existence checks. 519be0696c1SRobert Garrett.It Ar argument Ns Sy _postcmd 520be0696c1SRobert GarrettShell commands to run if running 521be0696c1SRobert Garrett.Ar argument Ns Sy _cmd 522be0696c1SRobert Garrettor the default method for 523be0696c1SRobert Garrett.Ar argument 524be0696c1SRobert Garrettreturned a zero exit code. 525be0696c1SRobert Garrett.It Sy sig_stop 526be0696c1SRobert GarrettSignal to send the processes to stop in the default 527be0696c1SRobert Garrett.Sy stop 528be0696c1SRobert Garrettmethod. 529be0696c1SRobert GarrettDefaults to 530be0696c1SRobert Garrett.Dv SIGTERM . 531be0696c1SRobert Garrett.It Sy sig_reload 532be0696c1SRobert GarrettSignal to send the processes to reload in the default 533be0696c1SRobert Garrett.Sy reload 534be0696c1SRobert Garrettmethod. 535be0696c1SRobert GarrettDefaults to 536be0696c1SRobert Garrett.Dv SIGHUP . 537be0696c1SRobert Garrett.El 538be0696c1SRobert Garrett.Pp 539be0696c1SRobert GarrettFor a given method 540be0696c1SRobert Garrett.Ar argument , 541be0696c1SRobert Garrettif 542be0696c1SRobert Garrett.Ar argument Ns Sy _cmd 543be0696c1SRobert Garrettis not defined, then a default method is provided by 544be0696c1SRobert Garrett.Sy run_rc_command : 545be0696c1SRobert Garrett.Bl -tag -width "argument" -offset indent 546be0696c1SRobert Garrett.It Sy Argument 547be0696c1SRobert Garrett.Sy Default method 548be0696c1SRobert Garrett.It Sy start 549be0696c1SRobert GarrettIf 550be0696c1SRobert Garrett.Sy command 551be0696c1SRobert Garrettis not running and 552be0696c1SRobert Garrett.Ic checkyesno Sy rcvar 553be0696c1SRobert Garrettsucceeds, start 554be0696c1SRobert Garrett.Sy command . 555be0696c1SRobert Garrett.It Sy stop 556be0696c1SRobert GarrettDetermine the PIDs of 557be0696c1SRobert Garrett.Sy command 558be0696c1SRobert Garrettwith 559be0696c1SRobert Garrett.Ic check_pidfile 560be0696c1SRobert Garrettor 561be0696c1SRobert Garrett.Ic check_process 562be0696c1SRobert Garrett(as appropriate), 563be0696c1SRobert Garrett.Ic kill Sy sig_stop 564be0696c1SRobert Garrettthose PIDs, and run 565be0696c1SRobert Garrett.Ic wait_for_pids 566be0696c1SRobert Garretton those PIDs. 567be0696c1SRobert Garrett.It Sy reload 568be0696c1SRobert GarrettSimilar to 569be0696c1SRobert Garrett.Sy stop , 570be0696c1SRobert Garrettexcept that it uses 571be0696c1SRobert Garrett.Sy sig_reload 572be0696c1SRobert Garrettinstead, and doesn't run 573be0696c1SRobert Garrett.Ic wait_for_pids . 574be0696c1SRobert Garrett.It Sy restart 575be0696c1SRobert GarrettRuns the 576be0696c1SRobert Garrett.Sy stop 577be0696c1SRobert Garrettmethod, then the 578be0696c1SRobert Garrett.Sy start 579be0696c1SRobert Garrettmethod. 580be0696c1SRobert Garrett.It Sy status 581be0696c1SRobert GarrettShow the PID of 582be0696c1SRobert Garrett.Sy command , 583be0696c1SRobert Garrettor some other script specific status operation. 584be0696c1SRobert Garrett.It Sy poll 585be0696c1SRobert GarrettWait for 586be0696c1SRobert Garrett.Sy command 587be0696c1SRobert Garrettto exit. 588be0696c1SRobert Garrett.It Sy rcvar 589be0696c1SRobert GarrettDisplay which 590be0696c1SRobert Garrett.Xr rc.conf 5 591be0696c1SRobert Garrettvariable is used (if any). 592be0696c1SRobert GarrettThis method always works, even if the appropriate 593be0696c1SRobert Garrett.Xr rc.conf 5 594be0696c1SRobert Garrettvariable is set to 595be0696c1SRobert Garrett.Sq NO . 596be0696c1SRobert Garrett.El 597be0696c1SRobert Garrett.Pp 598be0696c1SRobert GarrettThe following variables are available to the methods 599be0696c1SRobert Garrett(such as 600be0696c1SRobert Garrett.Ar argument Ns Sy _cmd ) 601be0696c1SRobert Garrettas well as after 602be0696c1SRobert Garrett.Ic run_rc_command 603be0696c1SRobert Garretthas completed: 604be0696c1SRobert Garrett.Bl -tag -width "rc_flags" -offset indent 605be0696c1SRobert Garrett.It Sy rc_arg 606be0696c1SRobert GarrettArgument provided to 607be0696c1SRobert Garrett.Sy run_rc_command , 608be0696c1SRobert Garrettafter fast and force processing has been performed. 609be0696c1SRobert Garrett.It Sy rc_flags 610be0696c1SRobert GarrettFlags to start the default command with. 611be0696c1SRobert GarrettDefaults to 612be0696c1SRobert Garrett.Sy ${name}_flags , 613be0696c1SRobert Garrettunless overridden by the environment variable 614be0696c1SRobert Garrett.Sq Ev flags . 615be0696c1SRobert GarrettThis variable may be changed by the 616be0696c1SRobert Garrett.Ar argument Ns Sy _precmd 617be0696c1SRobert Garrettmethod. 618be0696c1SRobert Garrett.It Sy rc_pid 619be0696c1SRobert GarrettPID of 620be0696c1SRobert Garrett.Sy command 621be0696c1SRobert Garrett(if appropriate). 622be0696c1SRobert Garrett.It Sy rc_fast 623be0696c1SRobert GarrettNot empty if 624be0696c1SRobert Garrett.Dq fast 625be0696c1SRobert Garrettprefix was used. 626be0696c1SRobert Garrett.It Sy rc_force 627be0696c1SRobert GarrettNot empty if 628be0696c1SRobert Garrett.Dq force 629be0696c1SRobert Garrettprefix was used. 630be0696c1SRobert Garrett.El 631be0696c1SRobert Garrett.It Ic run_rc_script Ar file Ar argument 632be0696c1SRobert GarrettStart the script 633be0696c1SRobert Garrett.Ar file 634be0696c1SRobert Garrettwith an argument of 635be0696c1SRobert Garrett.Ar argument , 636be0696c1SRobert Garrettand handle the return value from the script. 637be0696c1SRobert Garrett.Pp 638be0696c1SRobert GarrettVarious shell variables are unset before 639be0696c1SRobert Garrett.Ar file 640be0696c1SRobert Garrettis started: 641be0696c1SRobert Garrett.Bd -ragged -offset indent 642be0696c1SRobert Garrett.Sy name , 643be0696c1SRobert Garrett.Sy command , 644be0696c1SRobert Garrett.Sy command_args , 645be0696c1SRobert Garrett.Sy command_interpreter , 646be0696c1SRobert Garrett.Sy extra_commands , 647be0696c1SRobert Garrett.Sy pidfile , 648be0696c1SRobert Garrett.Sy rcvar , 649be0696c1SRobert Garrett.Sy required_dirs , 650be0696c1SRobert Garrett.Sy required_files , 651be0696c1SRobert Garrett.Sy required_vars , 652be0696c1SRobert Garrett.Ar argument Ns Sy _cmd , 653be0696c1SRobert Garrett.Ar argument Ns Sy _precmd . 654be0696c1SRobert Garrett.Ar argument Ns Sy _postcmd . 655be0696c1SRobert Garrett.Ed 656be0696c1SRobert Garrett.Pp 657be0696c1SRobert GarrettThe startup behaviour of 658be0696c1SRobert Garrett.Ar file 659be0696c1SRobert Garrettdepends upon the following checks: 660be0696c1SRobert Garrett.Bl -enum 661be0696c1SRobert Garrett.It 662be0696c1SRobert GarrettIf 663be0696c1SRobert Garrett.Ar file 664be0696c1SRobert Garrettends in 665be0696c1SRobert Garrett.Pa .sh , 666be0696c1SRobert Garrettit is sourced into the current shell. 667be0696c1SRobert Garrett.It 668be0696c1SRobert GarrettIf 669be0696c1SRobert Garrett.Ar file 670be0696c1SRobert Garrettappears to be a backup or scratch file 671be0696c1SRobert Garrett(e.g., with a suffix of 672be0696c1SRobert Garrett.Sq ~ , 673be0696c1SRobert Garrett.Sq # , 674be0696c1SRobert Garrett.Sq .OLD , 675be0696c1SRobert Garrettor 676be0696c1SRobert Garrett.Sq .orig ) , 677be0696c1SRobert Garrettignore it. 678be0696c1SRobert Garrett.It 679be0696c1SRobert GarrettIf 680be0696c1SRobert Garrett.Ar file 681be0696c1SRobert Garrettis not executable, ignore it. 682be0696c1SRobert Garrett.It 683be0696c1SRobert GarrettIf the 684be0696c1SRobert Garrett.Xr rc.conf 5 685be0696c1SRobert Garrettvariable 686be0696c1SRobert Garrett.Sy rc_fast_and_loose 687be0696c1SRobert Garrettis empty, 688be0696c1SRobert Garrettsource 689be0696c1SRobert Garrett.Ar file 690be0696c1SRobert Garrettin a sub shell, 691be0696c1SRobert Garrettotherwise source 692be0696c1SRobert Garrett.Ar file 693be0696c1SRobert Garrettinto the current shell. 694be0696c1SRobert Garrett.El 695be0696c1SRobert Garrett.It Ic set_rcvar Op Ar base 696be0696c1SRobert GarrettSet the variable name required to start a service. In 6979bb2a92dSHiten Pandya.Dx 698be0696c1SRobert Garretta daemon is usually controlled by an 699be0696c1SRobert Garrett.Xr rc.conf 5 700be0696c1SRobert Garrettvariable consisting of a daemon's name postfixed by the string 701be0696c1SRobert Garrett.Sy "_enable" . 702be0696c1SRobert GarrettThis is not the case in 703be0696c1SRobert Garrett.Nx . 704be0696c1SRobert GarrettWhen the following line is included in a script 705be0696c1SRobert Garrett.Pp 706be0696c1SRobert Garrett.Dl rcvar=`set_rcvar` 707be0696c1SRobert Garrett.Pp 708be0696c1SRobert GarrettThis function will use the value of the 709be0696c1SRobert Garrett.Sy $name 710be0696c1SRobert Garrettvariable, which should be defined by the calling script, to construct the appropriate 711be0696c1SRobert Garrett.Xr rc.conf 5 712be0696c1SRobert Garrettknob. If the 713be0696c1SRobert Garrett.Ar base 714be0696c1SRobert Garrettargument is set it will use 715be0696c1SRobert Garrett.Ar base 716be0696c1SRobert Garrettinstead of 717be0696c1SRobert Garrett.Sy $name . 718be0696c1SRobert Garrett.It Ic wait_for_pids Op Ar pid Op Ar ... 719be0696c1SRobert GarrettWait until all of the provided 720be0696c1SRobert Garrett.Ar pids 721be0696c1SRobert Garrettdon't exist any more, printing the list of outstanding 722be0696c1SRobert Garrett.Ar pids 723be0696c1SRobert Garrettevery two seconds. 724be0696c1SRobert Garrett.It Ic warn Ar message 725be0696c1SRobert GarrettDisplay a warning message to 726be0696c1SRobert Garrett.Em stderr 727be0696c1SRobert Garrettand log it to the system log 728be0696c1SRobert Garrettusing 729be0696c1SRobert Garrett.Xr logger 1 . 730be0696c1SRobert GarrettThe warning message consists of the script name 731be0696c1SRobert Garrett(from 732be0696c1SRobert Garrett.Sy $0 ) , 733be0696c1SRobert Garrettfollowed by 734be0696c1SRobert Garrett.Dq ": WARNING: " , 735be0696c1SRobert Garrettand then 736be0696c1SRobert Garrett.Ar message . 737be0696c1SRobert Garrett.El 738be0696c1SRobert Garrett.Sh FILES 739be0696c1SRobert Garrett.Bl -tag -width /etc/rc.subr -compact 740be0696c1SRobert Garrett.It Pa /etc/rc.subr 741be0696c1SRobert GarrettThe 742be0696c1SRobert Garrett.Nm 743be0696c1SRobert Garrettfile resides in 744be0696c1SRobert Garrett.Pa /etc . 745be0696c1SRobert Garrett.El 746be0696c1SRobert Garrett.Sh SEE ALSO 747be0696c1SRobert Garrett.Xr rc.conf 5 , 748be0696c1SRobert Garrett.Xr rc 8 749be0696c1SRobert Garrett.Sh HISTORY 750be0696c1SRobert Garrett.Nm 751be0696c1SRobert Garrettappeared in 752be0696c1SRobert Garrett.Nx 1.3 . 753be0696c1SRobert GarrettThe 754be0696c1SRobert Garrett.Xr rc.d 8 755be0696c1SRobert Garrettsupport functions appeared in 756be0696c1SRobert Garrett.Nx 1.5 . 757be0696c1SRobert Garrett.Nm 758be0696c1SRobert Garrettfirst appeared in 759be0696c1SRobert Garrett.Fx 5.0 . 760