service.sh revision 293728
1#!/bin/sh 2 3# $FreeBSD: stable/10/usr.sbin/service/service.sh 293728 2016-01-12 05:55:28Z allanjude $ 4 5# Copyright (c) 2009 Douglas Barton 6# All rights reserved. 7# 8# Redistribution and use in source and binary forms, with or without 9# modification, are permitted provided that the following conditions 10# are met: 11# 1. Redistributions of source code must retain the above copyright 12# notice, this list of conditions and the following disclaimer. 13# 2. Redistributions in binary form must reproduce the above copyright 14# notice, this list of conditions and the following disclaimer in the 15# documentation and/or other materials provided with the distribution. 16# 17# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27# SUCH DAMAGE. 28 29. /etc/rc.subr 30load_rc_config 'XXX' 31 32usage () { 33 echo '' 34 echo 'Usage:' 35 echo "${0##*/} -e" 36 echo "${0##*/} -R" 37 echo "${0##*/} [-v] -l | -r" 38 echo "${0##*/} [-v] <rc.d script> start|stop|etc." 39 echo "${0##*/} -h" 40 echo '' 41 echo '-e Show services that are enabled' 42 echo "-R Stop and start enabled $local_startup services" 43 echo "-l List all scripts in /etc/rc.d and $local_startup" 44 echo '-r Show the results of boot time rcorder' 45 echo '-v Verbose' 46 echo '' 47} 48 49while getopts 'ehlrRv' COMMAND_LINE_ARGUMENT ; do 50 case "${COMMAND_LINE_ARGUMENT}" in 51 e) ENABLED=eopt ;; 52 h) usage ; exit 0 ;; 53 l) LIST=lopt ;; 54 r) RCORDER=ropt ;; 55 R) RESTART=Ropt ;; 56 v) VERBOSE=vopt ;; 57 *) usage ; exit 1 ;; 58 esac 59done 60shift $(( $OPTIND - 1 )) 61 62if [ -n "$RESTART" ]; then 63 skip="-s nostart" 64 if [ `/sbin/sysctl -n security.jail.jailed` -eq 1 ]; then 65 skip="$skip -s nojail" 66 fi 67 [ -n "$local_startup" ] && find_local_scripts_new 68 files=`rcorder ${skip} ${local_rc} 2>/dev/null` 69 70 for file in `reverse_list ${files}`; do 71 if grep -q ^rcvar $file; then 72 eval `grep ^name= $file` 73 eval `grep ^rcvar $file` 74 load_rc_config_var ${name} ${rcvar} 75 checkyesno $rcvar 2>/dev/null && run_rc_script ${file} stop 76 fi 77 done 78 for file in $files; do 79 if grep -q ^rcvar $file; then 80 eval `grep ^name= $file` 81 eval `grep ^rcvar $file` 82 checkyesno $rcvar 2>/dev/null && run_rc_script ${file} start 83 fi 84 done 85 86 exit 0 87fi 88 89if [ -n "$ENABLED" -o -n "$RCORDER" ]; then 90 # Copied from /etc/rc 91 skip="-s nostart" 92 if [ `/sbin/sysctl -n security.jail.jailed` -eq 1 ]; then 93 skip="$skip -s nojail" 94 fi 95 [ -n "$local_startup" ] && find_local_scripts_new 96 files=`rcorder ${skip} /etc/rc.d/* ${local_rc} 2>/dev/null` 97fi 98 99if [ -n "$ENABLED" ]; then 100 for file in $files; do 101 if grep -q ^rcvar $file; then 102 eval `grep ^name= $file` 103 eval `grep ^rcvar $file` 104 load_rc_config_var ${name} ${rcvar} 105 checkyesno $rcvar 2>/dev/null && echo $file 106 fi 107 done 108 exit 0 109fi 110 111if [ -n "$LIST" ]; then 112 for dir in /etc/rc.d $local_startup; do 113 [ -n "$VERBOSE" ] && echo "From ${dir}:" 114 [ -d ${dir} ] && /bin/ls -1 ${dir} 115 done 116 exit 0 117fi 118 119if [ -n "$RCORDER" ]; then 120 for file in $files; do 121 echo $file 122 if [ -n "$VERBOSE" ]; then 123 case "$file" in 124 */${early_late_divider}) 125 echo '========= Early/Late Divider =========' ;; 126 esac 127 fi 128 done 129 exit 0 130fi 131 132if [ $# -gt 1 ]; then 133 script=$1 134 shift 135else 136 usage 137 exit 1 138fi 139 140cd / 141for dir in /etc/rc.d $local_startup; do 142 if [ -x "$dir/$script" ]; then 143 [ -n "$VERBOSE" ] && echo "$script is located in $dir" 144 exec env -i HOME=/ PATH=/sbin:/bin:/usr/sbin:/usr/bin $dir/$script $* 145 fi 146done 147 148# If the script was not found 149echo "$script does not exist in /etc/rc.d or the local startup" 150echo "directories (${local_startup})" 151exit 1 152