# /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
}