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