xref: /dflybsd-src/share/man/man8/rc.subr.8 (revision 80d66f6b95e926051a3a48d60ae1f36eca0923a2)
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