service: vanilla import of /etc/rc.d/xxx wrapper
authorFranco Fichtner <franco@lastsummer.de>
Mon, 2 Jun 2014 19:59:29 +0000 (21:59 +0200)
committerFranco Fichtner <franco@lastsummer.de>
Mon, 2 Jun 2014 20:18:14 +0000 (22:18 +0200)
Taken-from: FreeBSD

usr.sbin/Makefile
usr.sbin/service/Makefile [new file with mode: 0644]
usr.sbin/service/service.8 [new file with mode: 0644]
usr.sbin/service/service.sh [new file with mode: 0755]

index 5a64072..0eaadc3 100644 (file)
@@ -109,6 +109,7 @@ SUBDIR= 802_11 \
        sa \
        sdpd \
        sensorsd \
+       service \
        setkey \
        sliplogin \
        slstat \
diff --git a/usr.sbin/service/Makefile b/usr.sbin/service/Makefile
new file mode 100644 (file)
index 0000000..636abab
--- /dev/null
@@ -0,0 +1,7 @@
+# $FreeBSD: head/usr.sbin/service/Makefile 200743 2009-12-20 01:34:12Z dougb $
+
+SCRIPTS=service.sh
+MAN=   service.8
+
+.include <bsd.prog.mk>
+
diff --git a/usr.sbin/service/service.8 b/usr.sbin/service/service.8
new file mode 100644 (file)
index 0000000..9fd021a
--- /dev/null
@@ -0,0 +1,135 @@
+.\" Copyright (c) 2009 Douglas Barton
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: head/usr.sbin/service/service.8 244132 2012-12-12 01:50:58Z delphij $
+.\"
+.Dd December 11, 2012
+.Dt SERVICE 8
+.Os
+.Sh NAME
+.Nm service
+.Nd "control (start/stop/etc.) or list system services"
+.Sh SYNOPSIS
+.Nm
+.Fl e
+.Nm
+.Fl R
+.Nm
+.Op Fl v
+.Fl l | r
+.Nm
+.Op Fl v
+.Ar <rc.d script> start|stop|etc.
+.Sh DESCRIPTION
+The
+.Nm
+command is an easy interface to the rc.d system.
+Its primary purpose is to start and stop services provided
+by the rc.d scripts.
+When used for this purpose it will set the same restricted
+environment that is in use at boot time (see below).
+It can also be used to list
+the scripts using various criteria.
+.Pp
+The options are as follows:
+.Bl -tag -width F1
+.It Fl e
+List services that are enabled.
+The list of scripts to check is compiled using
+.Xr rcorder 8
+the same way that it is done in
+.Xr rc 8 ,
+then that list of scripts is checked for an
+.Qq rcvar
+assignment.
+If present the script is checked to see if it is enabled.
+.It Fl R
+Restart all enabled local services.
+.It Fl l
+List all files in
+.Pa /etc/rc.d
+and the local startup directories.
+As described in
+.Xr rc.conf 5
+this is usually
+.Pa /usr/local/etc/rc.d .
+All files will be listed whether they are an actual
+rc.d script or not.
+.It Fl r
+Generate the
+.Xr rcorder 8
+as in
+.Fl e
+above, but list all of the files, not just what is enabled.
+.It Fl v
+Be slightly more verbose
+.El
+.Sh ENVIRONMENT
+When used to run rc.d scripts the
+.Nm
+command sets
+.Ev HOME
+to
+.Pa /
+and
+.Ev PATH
+to
+.Pa /sbin:/bin:/usr/sbin:/usr/bin
+which is how they are set in
+.Pa /etc/rc
+at boot time.
+.Sh EXIT STATUS
+.Ex -std
+.Sh EXAMPLES
+The following are examples of typical usage of the
+.Nm
+command:
+.Pp
+.Dl "service named status"
+.Dl "service -rv"
+.Pp
+The following programmable completion entry can be use in
+.Xr bash 1
+for the names of the rc.d scripts:
+.Dl "_service () {"
+.Dl "  local cur"
+.Dl "  cur=${COMP_WORDS[COMP_CWORD]}"
+.Dl "  COMPREPLY=( $( compgen -W '$( service -l )' -- $cur ) )"
+.Dl "  return 0"
+.Dl "}"
+.Dl "complete -F _service service"
+.Sh SEE ALSO
+.Xr bash 1 Pq Pa ports/shells/bash ,
+.Xr rc.conf 5 ,
+.Xr rc 8 ,
+.Xr rcorder 8
+.Sh HISTORY
+The
+.Nm
+utility first appeared in
+.Fx 7.3 .
+.Sh AUTHORS
+This
+manual page was written by
+.An Douglas Barton <dougb@FreeBSD.org> .
diff --git a/usr.sbin/service/service.sh b/usr.sbin/service/service.sh
new file mode 100755 (executable)
index 0000000..71405b8
--- /dev/null
@@ -0,0 +1,149 @@
+#!/bin/sh
+
+# $FreeBSD: head/usr.sbin/service/service.sh 263202 2014-03-15 02:26:46Z eadler $
+
+#  Copyright (c) 2009 Douglas Barton
+#  All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#  1. Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+#  2. Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+#  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+#  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+#  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+#  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+#  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+#  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+#  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+#  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+#  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+#  SUCH DAMAGE.
+
+. /etc/rc.subr
+load_rc_config 'XXX'
+
+usage () {
+       echo ''
+       echo 'Usage:'
+       echo "${0##*/} -e"
+       echo "${0##*/} -R"
+       echo "${0##*/} [-v] -l | -r"
+       echo "${0##*/} [-v] <rc.d script> start|stop|etc."
+       echo "${0##*/} -h"
+       echo ''
+       echo '-e        Show services that are enabled'
+       echo "-R        Stop and start enabled $local_startup services"
+       echo "-l        List all scripts in /etc/rc.d and $local_startup"
+       echo '-r        Show the results of boot time rcorder'
+       echo '-v        Verbose'
+       echo ''
+}
+
+while getopts 'ehlrRv' COMMAND_LINE_ARGUMENT ; do
+       case "${COMMAND_LINE_ARGUMENT}" in
+       e)      ENABLED=eopt ;;
+       h)      usage ; exit 0 ;;
+       l)      LIST=lopt ;;
+       r)      RCORDER=ropt ;;
+       R)      RESTART=Ropt ;;
+       v)      VERBOSE=vopt ;;
+       *)      usage ; exit 1 ;;
+       esac
+done
+shift $(( $OPTIND - 1 ))
+
+if [ -n "$RESTART" ]; then
+       skip="-s nostart"
+       if [ `/sbin/sysctl -n security.jail.jailed` -eq 1 ]; then
+               skip="$skip -s nojail"
+       fi
+       [ -n "$local_startup" ] && find_local_scripts_new
+       files=`rcorder ${skip} ${local_rc} 2>/dev/null`
+
+       for file in `reverse_list ${files}`; do
+               if grep -q ^rcvar $file; then
+                       eval `grep ^name= $file`
+                       eval `grep ^rcvar $file`
+                       checkyesno $rcvar 2>/dev/null && run_rc_script ${file} stop
+               fi
+       done
+       for file in $files; do
+               if grep -q ^rcvar $file; then
+                       eval `grep ^name= $file`
+                       eval `grep ^rcvar $file`
+                       checkyesno $rcvar 2>/dev/null && run_rc_script ${file} start
+               fi
+       done
+
+       exit 0
+fi
+
+if [ -n "$ENABLED" -o -n "$RCORDER" ]; then
+       # Copied from /etc/rc
+       skip="-s nostart"
+       if [ `/sbin/sysctl -n security.jail.jailed` -eq 1 ]; then
+               skip="$skip -s nojail"
+       fi
+       [ -n "$local_startup" ] && find_local_scripts_new
+       files=`rcorder ${skip} /etc/rc.d/* ${local_rc} 2>/dev/null`
+fi
+
+if [ -n "$ENABLED" ]; then
+       for file in $files; do
+               if grep -q ^rcvar $file; then
+                       eval `grep ^name= $file`
+                       eval `grep ^rcvar $file`
+                       checkyesno $rcvar 2>/dev/null && echo $file
+               fi
+       done
+       exit 0
+fi
+
+if [ -n "$LIST" ]; then
+       for dir in /etc/rc.d $local_startup; do
+               [ -n "$VERBOSE" ] && echo "From ${dir}:"
+               cd $dir && for file in *; do echo $file; done
+       done
+       exit 0
+fi
+
+if [ -n "$RCORDER" ]; then
+       for file in $files; do
+               echo $file
+               if [ -n "$VERBOSE" ]; then
+                       case "$file" in
+                       */${early_late_divider})
+                               echo '========= Early/Late Divider =========' ;;
+                       esac
+               fi
+       done
+       exit 0
+fi
+
+if [ $# -gt 1 ]; then
+       script=$1
+       shift
+else
+       usage
+       exit 1
+fi
+
+cd /
+for dir in /etc/rc.d $local_startup; do
+       if [ -x "$dir/$script" ]; then
+               [ -n "$VERBOSE" ] && echo "$script is located in $dir"
+               exec env -i HOME=/ PATH=/sbin:/bin:/usr/sbin:/usr/bin $dir/$script $*
+       fi
+done
+
+# If the script was not found
+echo "$script does not exist in /etc/rc.d or the local startup"
+echo "directories (${local_startup}), or is not executable"
+exit 1