123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368 |
- # /lib/lsb/init-functions for Debian -*- shell-script -*-
- #
- #Copyright (c) 2002-08 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 AUTHOR ``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.
- #w002 fixes for woof.
- start_daemon () {
- local force nice pidfile exec i
- force=0
- nice=0
- pidfile=/dev/null
- OPTIND=1
- while getopts fn:p: opt ; do
- case "$opt" in
- f) force=1;;
- n) nice="$OPTARG";;
- p) pidfile="$OPTARG";;
- esac
- done
-
- shift $(($OPTIND - 1))
- if [ "$1" = '--' ]; then
- shift
- fi
- 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 specified pid
- pidfile=
- specified=
-
- OPTIND=1
- while getopts p: opt ; do
- case "$opt" in
- p) pidfile="$OPTARG"; specified=1;;
- esac
- done
- shift $(($OPTIND - 1))
- if [ -z "${pidfile:-}" ]; then
- pidfile=/var/run/${1##*/}.pid
- fi
- if [ -f "$pidfile" ]; then
- read pid < "$pidfile"
- if [ -n "${pid:-}" ]; then
- if $(kill -0 "${pid:-}" 2> /dev/null); then
- echo "$pid"
- return 0
- elif ps "${pid:-}" >/dev/null 2>&1; then
- echo "$pid"
- return 0 # program is running, but not owned by this user
- else
- return 1 # program is dead and /var/run pid file exists
- fi
- fi
- fi
- if [ -x /bin/pidof -a ! "$specified" ]; then
- status="0"
- /bin/pidof -o %PPID $1 || status="$?"
- if [ "$status" = 1 ]; then
- return 3 # program is not running
- fi
- return 0
- fi
- return 4 # program or service is unknown
- }
- # start-stop-daemon uses the same algorithm as "pidofproc" above.
- killproc () {
- local pidfile sig status base i name_param is_term_sig
- pidfile=
- name_param=
- is_term_sig=no
- OPTIND=1
- while getopts p: opt ; do
- case "$opt" in
- p) pidfile="$OPTARG";;
- esac
- done
- shift $(($OPTIND - 1))
- base=${1##*/}
- if [ ! $pidfile ]; then
- pidfile=/var/run/$base.pid
- name_param="--name $base"
- fi
- sig=$(echo ${2:-} | sed -e 's/^-\(.*\)/\1/')
- sig=$(echo $sig | sed -e 's/^SIG\(.*\)/\1/')
- if [ -z "$sig" -o "$sig" = 15 -o "$sig" = TERM ]; then
- is_term_sig=yes
- fi
- status=0
- if [ ! "$is_term_sig" = yes ]; then
- if [ -n "$sig" ]; then
- /sbin/start-stop-daemon --stop --signal "$sig" --pidfile "$pidfile" --quiet $name_param || status="$?"
- else
- /sbin/start-stop-daemon --stop --pidfile "$pidfile" --quiet $name_param || status="$?"
- fi
- else
- /sbin/start-stop-daemon --stop --pidfile "$pidfile" --retry 5 --quiet --oknodo $name_param || status="$?"
- fi
- if [ "$status" = 1 ]; then
- if [ -n "$sig" ]; then
- return 0
- fi
- return 3 # program is not running
- fi
- if [ "$status" = 0 -a "$is_term_sig" = yes ]; then
- pidofproc -p $pidfile "$1" >/dev/null || rm -f "$pidfile"
- fi
- return 0
- }
- # Return LSB status
- status_of_proc () {
- local pidfile daemon name status
- pidfile=
- OPTIND=1
- while getopts p: opt ; do
- case "$opt" in
- p) pidfile="$OPTARG";;
- esac
- done
- shift $(($OPTIND - 1))
- if [ -n "$pidfile" ]; then
- pidfile="-p $pidfile"
- fi
- daemon="$1"
- name="$2"
- status="0"
- pidofproc $pidfile $daemon >/dev/null || status="$?"
- if [ "$status" = 0 ]; then
- log_success_msg "$name is running."
- return 0
- else
- log_failure_msg "$name is not running."
- return $status
- fi
- }
- log_use_fancy_output () {
- TPUT=/usr/bin/tput
- EXPR=/usr/bin/expr
- if [ -t 1 ] && [ "x$TERM" != "" ] && [ "x$TERM" != "xdumb" ] && [ -x $TPUT ] && [ -x $EXPR ] && $TPUT hpa 60 >/dev/null 2>&1 && $TPUT setaf 1 >/dev/null 2>&1; then
- [ -z $FANCYTTY ] && FANCYTTY=1 || true
- else
- FANCYTTY=0
- fi
- case "$FANCYTTY" in
- 1|Y|yes|true) true;;
- *) false;;
- esac
- }
- log_success_msg () {
- echo "$@" >> /tmp/bootsysinit.log #w002
- }
- log_failure_msg () {
- if log_use_fancy_output; then
- RED=`$TPUT setaf 1`
- NORMAL=`$TPUT op`
- /bin/echo -e "${RED}*${NORMAL} $@" >> /tmp/bootsysinit.log #w002
- else
- echo "$@" >> /tmp/bootsysinit.log #w002
- fi
- }
- log_warning_msg () {
- if log_use_fancy_output; then
- YELLOW=`$TPUT setaf 3`
- NORMAL=`$TPUT op`
- /bin/echo -e "${YELLOW}*${NORMAL} $@" >> /tmp/bootsysinit.log #w002
- else
- echo "$@" >> /tmp/bootsysinit.log #w002
- 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 -n "$@" >> /tmp/bootsysinit.log #w002
- }
- # Sample usage:
- # log_daemon_msg "Starting GNOME Login Manager" "gdm"
- #
- # On Debian, would output "Starting GNOME Login Manager: gdm"
- # On Ubuntu, would output " * Starting GNOME Login Manager..."
- #
- # If the second argument is omitted, logging suitable for use with
- # log_progress_msg() is used:
- #
- # log_daemon_msg "Starting remote filesystem services"
- #
- # On Debian, would output "Starting remote filesystem services:"
- # On Ubuntu, would output " * Starting remote filesystem services..."
- log_daemon_msg () {
- if [ -z "${1:-}" ]; then
- return 1
- fi
- log_daemon_msg_pre "$@"
- if [ -z "${2:-}" ]; then
- echo -n "$1:"
- return
- fi
-
- echo -n "$1: $2"
- log_daemon_msg_post "$@"
- }
- # #319739
- #
- # Per policy docs:
- #
- # log_daemon_msg "Starting remote file system services"
- # log_progress_msg "nfsd"; start-stop-daemon --start --quiet nfsd
- # log_progress_msg "mountd"; start-stop-daemon --start --quiet mountd
- # log_progress_msg "ugidd"; start-stop-daemon --start --quiet ugidd
- # log_end_msg 0
- #
- # You could also do something fancy with log_end_msg here based on the
- # return values of start-stop-daemon; this is left as an exercise for
- # the reader...
- #
- # On Ubuntu, one would expect log_progress_msg to be a no-op.
- log_progress_msg () {
- if [ -z "${1:-}" ]; then
- return 1
- fi
- echo -n " $@" >> /tmp/bootsysinit.log #w002
- }
- # int log_end_message (int exitstatus)
- log_end_msg () {
- # If no arguments were passed, return
- if [ -z "${1:-}" ]; then
- return 1
- fi
- log_end_msg_pre "$@"
- # Only do the fancy stuff if we have an appropriate terminal
- # and if /usr is already mounted
- if log_use_fancy_output; then
- RED=`$TPUT setaf 1`
- NORMAL=`$TPUT op`
- if [ $1 -eq 0 ]; then
- echo "." >> /tmp/bootsysinit.log #w002
- else
- /bin/echo -e " ${RED}failed!${NORMAL}" >> /tmp/bootsysinit.log #w002
- fi
- else
- if [ $1 -eq 0 ]; then
- echo "." >> /tmp/bootsysinit.log #w002
- else
- echo " failed!" >> /tmp/bootsysinit.log #w002
- fi
- fi
- log_end_msg_post "$@"
- return $1
- }
- log_action_msg () {
- echo "$@." >> /tmp/bootsysinit.log #w002
- }
- log_action_begin_msg () {
- echo -n "$@..." >> /tmp/bootsysinit.log #w002
- }
- log_action_cont_msg () {
- echo -n "$@..." >> /tmp/bootsysinit.log #w002
- }
- log_action_end_msg () {
- log_action_end_msg_pre "$@"
- if [ -z "${2:-}" ]; then
- end="."
- else
- end=" ($2)."
- fi
- if [ $1 -eq 0 ]; then
- echo "done${end}" >> /tmp/bootsysinit.log #w002
- else
- if log_use_fancy_output; then
- RED=`$TPUT setaf 1`
- NORMAL=`$TPUT op`
- /bin/echo -e "${RED}failed${end}${NORMAL}" >> /tmp/bootsysinit.log #w002
- else
- echo "failed${end}" >> /tmp/bootsysinit.log #w002
- fi
- fi
- log_action_end_msg_post "$@"
- }
- # Hooks for /etc/lsb-base-logging.sh
- log_daemon_msg_pre () { :; }
- log_daemon_msg_post () { :; }
- log_end_msg_pre () { :; }
- log_end_msg_post () { :; }
- log_action_end_msg_pre () { :; }
- log_action_end_msg_post () { :; }
- FANCYTTY=
- [ -e /etc/lsb-base-logging.sh ] && . /etc/lsb-base-logging.sh || true
|