239 lines
5.5 KiB
Bash
Executable file
239 lines
5.5 KiB
Bash
Executable file
#!/bin/sh
|
|
# See init-d-script(5) for instructions on how to use this library.
|
|
#=============================================================================
|
|
# Define LSB log_* functions.
|
|
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
|
|
# and status_of_proc is working.
|
|
. /lib/lsb/init-functions
|
|
|
|
# PATH should only include /usr/* if it runs after the mountnfs.sh
|
|
# script. Scripts running before mountnfs.sh should remove the /usr/*
|
|
# entries.
|
|
PATH=/sbin:/usr/sbin:/bin:/usr/bin
|
|
export PATH
|
|
|
|
is_call_implemented() {
|
|
command -V $1 > /dev/null 2>&1
|
|
}
|
|
|
|
do_usage() {
|
|
if is_call_implemented do_reload ; then
|
|
echo "Usage: $SCRIPTNAME {start|stop|status|reload|restart|try-restart|force-reload}" >&2
|
|
else
|
|
echo "Usage: $SCRIPTNAME {start|stop|status|restart|try-restart|force-reload}" >&2
|
|
fi
|
|
}
|
|
|
|
call() {
|
|
cmd="$1"
|
|
shift
|
|
if is_call_implemented ${cmd}_override ; then
|
|
${cmd}_override "$@"
|
|
else
|
|
${cmd} "$@"
|
|
fi
|
|
}
|
|
|
|
#
|
|
# Function that starts the daemon/service
|
|
#
|
|
|
|
# Return
|
|
# 0 if daemon has been started
|
|
# 1 if daemon was already running
|
|
# 2 if daemon could not be started
|
|
do_start_cmd() {
|
|
start-stop-daemon --start --quiet ${PIDFILE:+--pidfile ${PIDFILE}} \
|
|
$START_ARGS \
|
|
--startas $DAEMON --name $NAME --exec $DAEMON --test > /dev/null \
|
|
|| return 1
|
|
start-stop-daemon --start --quiet ${PIDFILE:+--pidfile ${PIDFILE}} \
|
|
$START_ARGS \
|
|
--startas $DAEMON --name $NAME --exec $DAEMON -- $DAEMON_ARGS \
|
|
|| return 2
|
|
# Add code here, if necessary, that waits for the process to be ready
|
|
# to handle requests from services started subsequently which depend
|
|
# on this one. As a last resort, sleep for some time.
|
|
}
|
|
|
|
do_start()
|
|
{
|
|
if is_call_implemented do_start_prepare ; then
|
|
call do_start_prepare
|
|
fi
|
|
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
|
|
call do_start_cmd
|
|
case "$?" in
|
|
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
|
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
|
esac
|
|
if is_call_implemented do_start_cleanup ; then
|
|
call do_start_cleanup
|
|
fi
|
|
}
|
|
|
|
#
|
|
# Function that stops the daemon/service
|
|
#
|
|
|
|
# Return
|
|
# 0 if daemon has been stopped
|
|
# 1 if daemon was already stopped
|
|
# 2 if daemon could not be stopped
|
|
# other if a failure occurred
|
|
do_stop_cmd() {
|
|
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 \
|
|
$STOP_ARGS \
|
|
${PIDFILE:+--pidfile ${PIDFILE}} --name $NAME --exec $DAEMON
|
|
RETVAL="$?"
|
|
[ "$RETVAL" = 2 ] && return 2
|
|
# Wait for children to finish too if this is a daemon that forks
|
|
# and if the daemon is only ever run from this initscript.
|
|
# If the above conditions are not satisfied then add some other code
|
|
# that waits for the process to drop all resources that could be
|
|
# needed by services started subsequently. A last resort is to
|
|
# sleep for some time.
|
|
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 \
|
|
$STOP_ARGS \
|
|
--exec $DAEMON
|
|
[ "$?" = 2 ] && return 2
|
|
# Many daemons don't delete their pidfiles when they exit.
|
|
rm -f $PIDFILE
|
|
return $RETVAL
|
|
}
|
|
|
|
do_stop()
|
|
{
|
|
if is_call_implemented do_stop_prepare ; then
|
|
call do_stop_prepare
|
|
fi
|
|
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
|
|
call do_stop_cmd
|
|
case "$?" in
|
|
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
|
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
|
esac
|
|
if is_call_implemented do_stop_cleanup ; then
|
|
call do_stop_cleanup
|
|
fi
|
|
}
|
|
|
|
do_restart() {
|
|
[ "$VERBOSE" != no ] && log_daemon_msg "Restarting $DESC" "$NAME"
|
|
call do_stop_cmd
|
|
call do_start_cmd
|
|
case "$?" in
|
|
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
|
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
|
esac
|
|
}
|
|
|
|
do_force_reload() {
|
|
if is_call_implemented do_reload ; then
|
|
call do_reload
|
|
else
|
|
call do_restart
|
|
fi
|
|
}
|
|
|
|
# Enable this using
|
|
# alias do_reload=do_reload_sigusr1
|
|
do_reload_sigusr1() {
|
|
log_daemon_msg "Reloading $DESC configuration files" "$NAME"
|
|
start-stop-daemon --oknodo --stop --signal 1 --quiet \
|
|
--pidfile "$PIDFILE" --exec "$DAEMON"
|
|
log_end_msg $?
|
|
}
|
|
|
|
do_status() {
|
|
status_of_proc "$DAEMON" "$NAME" && return 0 || return $?
|
|
}
|
|
|
|
if [ "$DEBUG" = "true" ] ; then
|
|
set -x
|
|
fi
|
|
|
|
SCRIPTNAME=$1
|
|
scriptbasename="$(basename $1)"
|
|
if [ "$scriptbasename" != "init-d-script" ] ; then
|
|
script="$1"
|
|
shift
|
|
. $script
|
|
else
|
|
exit 0
|
|
fi
|
|
|
|
NAME=${NAME:=$(basename $DAEMON)}
|
|
DESC=${DESC:=$NAME}
|
|
|
|
# Do not use pid file if $PIDFILE is 'none'. Otherwise, generate from
|
|
# $NAME or use the value provided by the init.d script.
|
|
if [ none = "$PIDFILE" ] ; then
|
|
PIDFILE=
|
|
elif [ -z "$PIDFILE" ] ; then
|
|
PIDFILE=/var/run/$NAME.pid
|
|
fi
|
|
|
|
# Exit if the package is not installed
|
|
if [ none != "$DAEMON" ] && [ ! -x "$DAEMON" ] ; then
|
|
exit 0
|
|
fi
|
|
|
|
# Read configuration variable file if it is present
|
|
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
|
|
|
|
# Load the VERBOSE setting and other rcS variables
|
|
. /lib/init/vars.sh
|
|
if [ -t 0 ] ; then # Be verbose when called from a terminal
|
|
VERBOSE=yes
|
|
fi
|
|
|
|
case "$1" in
|
|
start)
|
|
call do_start
|
|
;;
|
|
stop)
|
|
call do_stop
|
|
;;
|
|
status)
|
|
call do_status
|
|
;;
|
|
reload)
|
|
if is_call_implemented do_reload ; then
|
|
do_reload
|
|
else
|
|
call do_usage
|
|
exit 3
|
|
fi
|
|
;;
|
|
force-reload)
|
|
call do_force_reload
|
|
;;
|
|
restart)
|
|
call do_restart
|
|
;;
|
|
try-restart)
|
|
log_daemon_msg "Trying to restart $DESC" "$NAME"
|
|
if call do_status > /dev/null 2>&1 ; then
|
|
call do_restart
|
|
log_end_msg $?
|
|
else
|
|
log_progress_msg "is not running."
|
|
log_end_msg 1
|
|
fi
|
|
;;
|
|
'')
|
|
call do_usage
|
|
exit 3
|
|
;;
|
|
*)
|
|
if is_call_implemented do_unknown ; then
|
|
call do_unknown "$1"
|
|
exit 3
|
|
else
|
|
call do_usage
|
|
exit 3
|
|
fi
|
|
;;
|
|
esac
|
|
exit 0
|