# /lib/lsb/init-functions for Debian -*- shell-script -*- # #Copyright (c) 2002-03 Chris Lawrence #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. #3. Neither the name of the author nor the names of other contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # #THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. start_daemon () { local force nice pidfile exec set -- `POSIXLY_CORRECT=1 getopt "fn:p:" $*` force=0 nice=0 pidfile=/dev/null for i in $*; do case $i in -f) force=1; shift;; -n) nice=$2; shift 2;; -p) pidfile=$2; shift 2;; --) shift; break;; esac done exec=$1; shift if [ $force = 1 ]; then /sbin/start-stop-daemon --start --nicelevel $nice --quiet --startas $exec --pidfile /dev/null --oknodo -- $* elif [ $pidfile ]; then /sbin/start-stop-daemon --start --nicelevel $nice --quiet --exec $exec --oknodo --pidfile "$pidfile" -- $* else /sbin/start-stop-daemon --start --nicelevel $nice --quiet --exec $exec --oknodo -- $* fi } pidofproc () { local pidfile line i pids= status set -- `POSIXLY_CORRECT=1 getopt "p:" $*` pidfile= for i in $*; do case $i in -p) pidfile=$2; shift 2;; --) shift; break;; esac done if [ -z "$pidfile" ]; then pidfile=/var/run/$(basename "$1").pid fi if [ -f "$pidfile" ]; then read -d "" line < "$pidfile" for i in $line; do if [ -z "$(echo $p | sed 's/[0-9]//g')" -a -d "/proc/$i" ]; then pids="$i $pids" fi done if [ -n "$pids" ]; then echo "$pids" return 0 else return 2 # program is dead and /var/run pid file exists fi elif [ -x /bin/pidof ]; then /bin/pidof -o %PPID $1 status="$?" [ "$status" = 1 ] && return 3 # program is not running return 0 else return 4 # program or service is unknown fi } # start-stop-daemon uses the same algorithm as "pidofproc" above. killproc () { local pidfile sig status set -- `POSIXLY_CORRECT=1 getopt "p:" $*` pidfile= for i in $*; do case $i in -p) pidfile=$2; shift 2;; --) shift; break;; esac done if [ ! $pidfile ]; then pidfile=/var/run/$(basename "$1").pid fi if [ $2 ]; then sig=$(echo $2 | sed -e 's/^-\(.*\)/\1/') sig=$(echo $sig | sed -e 's/^SIG\(.*\)/\1/') /sbin/start-stop-daemon --stop --pidfile "$pidfile" --signal $sig --quiet status="$?" [ "$status" = 1 ] && return 3 # program is not running return 0 else /sbin/start-stop-daemon --stop --pidfile "$pidfile" --retry 5 --quiet --oknodo fi } log_success_msg () { echo " * $@" } log_failure_msg () { TPUT=/usr/bin/tput if [ -x $TPUT ] && $TPUT hpa 60 >/dev/null 2>&1; then RED=`$TPUT setaf 1` NORMAL=`$TPUT op` echo " $RED*$NORMAL $@" else echo " * $@" fi } log_warning_msg () { TPUT=/usr/bin/tput if [ -x $TPUT ] && $TPUT hpa 60 >/dev/null 2>&1; then YELLOW=`$TPUT setaf 3` NORMAL=`$TPUT op` echo " $YELLOW*$NORMAL $@" else echo " * $@" fi } # # NON-LSB HELPER FUNCTIONS # # int get_lsb_header_val (char *scriptpathname, char *key) get_lsb_header_val () { if [ ! -f "$1" ] || [ -z "$2" ]; then return 1 fi LSB_S="### BEGIN INIT INFO" LSB_E="### END INIT INFO" sed -n "/$LSB_S/,/$LSB_E/ s/# $2: \(.*\)/\1/p" $1 } # int log_begin_message (char *message) log_begin_msg () { if [ -z "$1" ]; then return 1 fi echo " * $@" } # int log_end_message (int exitstatus) log_end_msg () { # If no arguments were passed, return [ -z "$1" ] && return 1 # Only do the fancy stuff if we have an appropriate terminal # and if /usr is already mounted TPUT=/usr/bin/tput EXPR=/usr/bin/expr if [ -x $TPUT ] && [ -x $EXPR ] && $TPUT hpa 60 >/dev/null 2>&1; then COLS=`$TPUT cols` if [ -n "$COLS" ]; then COL=`$EXPR $COLS - 7` else COL=73 fi UP=`$TPUT cuu1` END=`$TPUT hpa $COL` START=`$TPUT hpa 0` RED=`$TPUT setaf 1` NORMAL=`$TPUT op` if [ $1 -eq 0 ]; then echo "$UP$END[ ok ]" else echo -e "$UP$START $RED*$NORMAL$END[${RED}fail${NORMAL}]" fi else if [ $1 -eq 0 ]; then echo " ...done." else echo " ...fail!" fi fi return $1 }