Commit Graph

74 Commits

Author SHA1 Message Date
salo
74bbb8ef72 A very old patch sitting in my tree..
When rc scripts are started from interactive shell, be nice and when user
tries to start an unconfigured service, point him to rc.conf(5) and tell
him about the one* keyword.  Also be more user friendly when an unknown
argument is entered.

Example:

 # /etc/rc.d/cron start
 $cron is not enabled - see rc.conf(5).
 Use the following if you wish to perform the operation:
   /etc/rc.d/cron onestart

 # /etc/rc.d/cron nonsense
 /etc/rc.d/cron: unknown directive 'nonsense'.
 Usage: /etc/rc.d/cron [fast|force|one](start stop restart rcvar  status poll)


Inspired by discussion on tech-userlevel:

 http://mail-index.netbsd.org/tech-userlevel/2007/02/13/0010.html
 http://mail-index.netbsd.org/tech-userlevel/2007/02/13/0011.html
 http://mail-index.netbsd.org/tech-userlevel/2007/02/13/0012.html

Reminded about it and reviewed by <lukem>
2008-12-06 23:21:32 +00:00
dholland
dbdaee06a4 fix typo 2008-06-23 03:26:18 +00:00
he
4ff90c621b Add support for optionally setting some environment variables before
starting ${command}, via ${name}_env.

Discussed with lukem.
2008-05-22 14:03:26 +00:00
martin
11a6dbe728 Convert TNF licenses to new 2 clause variant 2008-04-30 13:10:46 +00:00
ad
2ecdf58c2c Remove systrace. Ok core@. 2007-12-31 15:31:24 +00:00
apb
31edfc6f0f * Add a stop_boot() function in rc.subr, to terminate a multi-user boot
by killing the parent process.  The parent's PID is saved in $RC_PID.
* In all rc.d/* scripts that previously tried to stop the boot,
  replace in-line code with "stop_boot".
* Document this.

This should fix PR 29822.
2007-04-06 14:20:08 +00:00
hubertf
78b99d6807 _find_processes(): in addition to the existing "interpreter: /path/to/daemon"
also recognize "interpreter: daemon" in ps(1) output.

That case statement should be rewritten with expr(1) if more flexibility is
needed.

Fixes PR 35366 by Dominik Joe Pantucek, debugged with much assistance
by him on IRC.
2007-01-27 14:30:26 +00:00
elad
fa3f94a430 PR/32004: Ed Ravin: command interpreter test in rc.subr doesn't accomodate
chroots

Patch applied, thanks!

okay apb@
2006-10-07 11:25:15 +00:00
he
5e1904ecea In order to handle some perl scripts running as daemons, add a
pattern which also matches "`basename $interpreter`: $command" in the
ps listing.  Should fix PR#31932.
2006-04-01 10:05:50 +00:00
lukem
3c81b28a9a * Implement
load_rc_config_var cmd var
  to load the rc.conf(5) configuration for cmd and set var in the
  current shell, using 'load_rc_config var' in a sub-shell to avoid
  unwanted side-effects.

* Improve required_vars warning message.
2004-10-12 14:45:29 +00:00
mycroft
7d2e1537c5 Add an _rc_subr_loaded variable, set to ":" by rc.subr. Scripts can use this
for a speedup by doing:
$_rc_subr_loaded . /etc/rc.subr
2004-08-13 18:08:03 +00:00
lukem
9bd9220cd7 When performing "start", "stop" or "reload" in run_rc_command(),
send any "<name> already running" or "<name> not running" messages
to stderr instead of stdout before the (existing) non-zero exit.
2004-05-03 14:52:26 +00:00
jmmv
3c8a1444d9 Introduce and use the rcvar_manpage variable, which contains the manual page
name where the user should look at for documentation about rcvar.  It defaults
to 'rc.subr(5)', as rc.subr is mainly used by rc.d scripts.

This variable is useful to let the daily, weekly, monthly and security scripts
tune the warning message shown when any of the variables they handle is not
properly set.

Closes PR misc/23908.
2004-04-02 13:13:47 +00:00
lukem
f3bab2a8fc Implement ``one'' prefix to allow a "one shot" operation as if
${rcvar}=yes yet all the other prerequisite tests are still performed.
The existing ``force'' prefix is a sledgehammer that ignores all the
prerequisite checks and always returns a zero exit status; this is a
more gentle approach to the problem of "manipulate this disabled
service without editing rc.conf(5)".
2004-01-06 00:52:24 +00:00
lukem
6d7e3e1b0d Add "*,v" to the list of scratch files to skip.
Suggested by Johnny Lam / Alistair Crooks
2003-07-26 05:13:47 +00:00
lukem
8026bccd2c Revert previous; the "return" if rc.subr had already loaded had issues
in some circumstances where run_rc_script()'s sourcing of an rc.d file
which then sourced rc.subr, the `optimisation' in rc.subr to "return as
we're already loaded" would finish more than just the inner-most sourcing.
I haven't tracked down the exact issue, but removing the `optimisation'
fixes the problem I noticed in starting up certain rc.d scripts, and
may fix [bin/22053] as well.
2003-07-04 14:14:10 +00:00
lukem
151e9a3180 If _rc_subr_loaded=true, "return" immediately, otherwise set that var
and continue as normal.
Gains ~ 2 seconds on 110 runs of ". rc.subr" on a shark.
Suggested by Andrew Cagney in [bin/18400]
2003-06-27 05:01:21 +00:00
lukem
e85d25db42 run_rc_command(): when checking if ${command} exists before executing it,
be sure to check under ${name_chroot} (if set).
Fix from Ed Ravin in [bin/18523]
2003-06-27 04:06:01 +00:00
christos
b224530c28 Use more concise shell syntax:
1. for i in $* -> for i
2. foo=$* -> foo="$@"
2003-06-03 14:00:45 +00:00
lukem
ef98b9ddca Fix logic error I introduced recently into mount_critical_filesystems().
Noted by kilbi@rad.rwth-aachen.de in [bin/19703].
2003-01-05 22:59:35 +00:00
lukem
dd2a7e0da5 'if ! command;' is not POSIX sh, even though our /bin/sh supports it 2003-01-05 11:40:29 +00:00
lukem
15388316f6 Change how internal boolean variables are used to:
if ! ${_somevar:-false}; then
		_somevar=true
	fi
(Consisent, slightly quicker, and slightly cleaner)
2003-01-04 15:27:43 +00:00
abs
9f39802939 Append ' - see rc.conf(5)' to unset variable warning:
/etc/rc.d/fu: WARNING: $fu is not set properly - see rc.conf(5).
Add a note to rc.conf that third party packages may test for additional
variables.
2002-08-26 17:46:57 +00:00
grant
36ae72d99a add test for /usr/bin/logger in warn/err. 2002-07-25 14:34:46 +00:00
atatat
7fe5615355 Add systrace(1) support to rc.subr. Most services (eg, ${name} is
inetd) started from rc can now be run under systrace by setting
${name}_systrace to a set of flags to be passed to systrace.  Note
that policies need to generated before you do this.
2002-07-08 16:14:53 +00:00
lukem
a40243df30 When using backup_uses_rcs=YES in backup_file(), after checking the file
in and setting -kb, check it out again, since the initial check in
trashes any RCSIDs (because -kb wasn't set at that time).

This stops the annoying situation where you add a new file (e.g, "foo")
which contains an RCSID and you get *two* notifications of differences
in two successives runs of /etc/security; the first when the file is
initially checked in and a second when diff finds the RCSID is different
(contains "foo.conf,v 1.1" instead of "foo,v 1.66").
2002-05-21 12:31:01 +00:00
lukem
892c0453dd consistently set rc_(fast|force)=yes 2002-04-18 07:18:05 +00:00
lukem
5ee7ac8886 Replace $critical_filesystems_beforenet with $critical_filesystems_local .
Replace  $critical_filesystems            with  $critical_filesystems_remote .

The new names are now consistent with the type argument that
mount_critical_filesystems() is called with, and allows for other types to
be easily supported by that function.

For backwards compatibility purposes, if the now obsolete variable is defined
(even empty), it takes precedence over the new form, and you will be warned.
If you want to stop the warnings, update your rc.conf(5) settings!
2002-03-27 08:53:39 +00:00
lukem
1a286b1407 - Rename a bunch of "internal" run_rc_command() variables and officially
make them "externally" available:
	Previous	Current		Purpose
	--------	-------		-------
	_arg		rc_arg		Argument to command, after fast/force
					processing performed (and prefix
					removed)

	_flags		rc_flags	Flags to start the default command
					with.  Defaults to ${name}_flags,
					unless overridden by $flags from the
					environment.  This variable may be
					changed by the precmd method.

	_pid		rc_pid		PID of command (if appropriate).

	_rc_run_fast	rc_fast		Not empty is "fast" was provided.

	_rc_run_force	rc_force	Not empty is "force" was provided.

- Use rc_flags instead of _flags or ${name}_flags in various rc.d scripts,
  so that $flags from the environment overrides ${name}_flags from rc.conf(5).
  Fixes [bin/15800].
2002-03-22 04:16:38 +00:00
lukem
d40d675711 - Add run_rc_command() control variable $command_interpreter
If set, the first line of $command is read, the leading #! is
  removed, whitespace is normalised, the first word is checked
  against $command_interpreter, and the result is used as the
  string to match in the ps(1) output.
  This code isn't infallable, but works for common cases such as
	#!/bin/sh
	#!  /usr/pkg/bin/perl  -w
  This helps solve the problem described in [bin/15563], and by
  Ed Ravin on tech-userlevel.

- Move the common elements of check_process() and check_pidfile() into
  _find_processes(), and call appropriately.
2002-03-21 12:21:00 +00:00
lukem
9bcc098690 Use ${_arg}_postcmd even if we're not using the default ${_arg}_cmd method. 2002-03-13 06:58:34 +00:00
lukem
9cfa003dc7 Implement ${_arg}_postcmd support, which is run if a default
start/stop/reload/restart operation succeeds (i.e, zero exit code).
Code from Lubomir Sedlacik <salo@Xtrmntr.org>.
2002-03-13 04:50:08 +00:00
lukem
80ce7c6cb7 Fixes derived from [bin/15563] submitted by Ron Roskens:
- Don't su(1) to ${name}_user if running as that user.
- Support $procname as the name of the process to search for.
  Defaults to the value of $command.
2002-02-25 12:49:33 +00:00
lukem
5bf3bfa2bb fix spelo. crank copyright year 2002-02-25 08:11:23 +00:00
lukem
04784cf374 Don't run "status" as if "force" is set, thus reverting part of rev 1.29.
I can't remember the rationale for why I made that change in the first place,
and there's been some good arguments presented to me as to why the rcvar
should be checked before status is run.
2002-02-25 07:12:47 +00:00
lukem
0ccd65df49 run_rc_script() improvements:
- always unset the variables used by run_rc_command() before sourcing an
  rc.d script, rather than just when rc_fast_and_loose is in effect.
  this allows run_rc_command() to be used in .sh scripts (with care).
- remove comment describing now-former limitation of .sh scripts.
- make the rc_fast_and_loose check only after the `` not *.sh / not scratch
  / script-is-executable '' checks.  rc_fast_and_loose now behaves a lot more
  like the normal operation, in that it skips scratch files and
  non-executable files
2002-02-25 06:58:14 +00:00
lukem
50b7dbcb07 Add reverse_list(), which prints the reverse of the list of words.
Doesn't attempt to handle words with whitespace, etc.
2001-11-19 03:18:32 +00:00
lukem
50aa483991 Improve run_rc_script():
- Skip files that end with `~', `#', `.OLD' or `.orig', as these are usually
  scratch or backup files created by programs, and we don't want to start them.
- Only try and run non `.sh' files if they're executable.

Per discussions with Andrew Brown, and closing his PR [bin/9981].
2001-06-18 06:53:45 +00:00
atatat
87c8919798 When using rcs to track backups, force the rcs archive to be unlocked,
use only non-strict locking, and leave the archives unlocked after
checking in changes.
2001-05-10 14:04:22 +00:00
lukem
4c9bb3bc3f * change wait_for_pids() to spin forever (rather than just ~ 65 seconds).
* change the default `stop' case to wait_for_pids after kill $sig_stop.
  this means that "/etc/rc.d/foo stop" won't return until the service
  has shut down. third party scripts that implement their own stop mechanism
  should offer this functionality as well.
* in the default restart case, don't bother doing `$0 poll' in between
  stop & start, because of the change above. (XXX: deprecate poll ?)
2001-05-09 16:40:59 +00:00
lukem
ab72f65dcd Don't try and use single quotes in the RHS of a ${ :+ } expansion
because /bin/sh needs a different syntax than ksh (and bash, etc).
Use a more obvious and less error prone method. (This complicated
use of ${:+} was only used to build the su command when running as
a separate user, but could always cause problems.)
Problem noted by Hubert Feyrer in conjunction with /etc/rc.d/sshd.
2001-05-07 07:07:11 +00:00
lukem
8490f0b0c0 * provide wait_for_pids(), which spins until all the given pids don't exist
* run_rc_command():
	- add support for "poll", which by default, uses wait_for_pids() on
	  the list of matching processes
	- in the "restart" case, call "poll" between "stop" and "start"

this fixes the situation where certain services (e.g, amd, squid) would
take a bit longer to shutdown after receiving the kill signal to shutdown,
and "/etc/rc.d/foo restart" would fail in the `start' phase.
2001-04-18 01:31:40 +00:00
lukem
f6a33791bb clarify that ${name}_groups is comma separated 2001-04-06 06:48:35 +00:00
atatat
2811b1707a Provide the capability of storing backups via RCS instead of just a
"current" and a "last" (which is useless if you wanna know what you
changed last week).  Set the default to on.
2001-04-04 03:17:19 +00:00
lukem
c47a806047 various speed-ups (and related work):
- only load rc.conf if $_rc_conf_loaded is not set
- use case instead of if for various string comparisons
- print the date at the start of the boot as well as at the end
- if $rc_fast_and_loose is set, always run the rc.d scripts in the
  current shell rather than in a subshell. this is not on by default
  because it's potentially dangerous (a rogue command could terminate
  the boot), but it is provided as an optional speedup for people
  with slow machines that have an expensive fork
2001-02-28 16:49:18 +00:00
lukem
be9b3eeabc * always run status'; i.e, ignore the setting of $rcvar just like rcvar' does.
* don't barf if `force' is used and $rcvar isn't set by the script
* only do the guts of `restart' once, by setting _rc_restart_done after the
  first run through. this stops scripts which call run_rc_command more than
  once (such as nfslocking) from doing the ``stop everything/start everything''
  sequence n times.
2000-11-17 03:47:43 +00:00
lukem
fa16fd6f70 when doing `status', return non-zero if the program isn't running.
request by thorpej.
2000-11-06 00:08:30 +00:00
lukem
9046e7c099 when running forcerestart', call the underlying stop' and `start'
with the `force' prefix as well
2000-11-05 23:48:14 +00:00
lukem
0c70e530af use ${foo##*/} instead of basename $foo. as suggested (with minor variation)
by Toru Nishimura <nisimura@itc.aist-nara.ac.jp>
2000-10-07 07:36:56 +00:00
lukem
60d3ee1b34 remove unnecessary leading `$' on warnings printed for $required_dirs
and $required_files.
2000-10-01 10:10:18 +00:00