#!/bin/sh
#/etc/init.d/watchdog: start watchdog daemon.

### BEGIN INIT INFO
# Provides:          watchdog
# Short-Description: Start software watchdog daemon
# Required-Start:    $all
# Required-Stop:     $all
# Should-Start:      
# Should-Stop:       
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
### END INIT INFO

PATH=/bin:/usr/bin:/sbin:/usr/sbin

test -x /usr/sbin/watchdog || exit 0

# For configuration of the init script use the file
# /etc/default/watchdog, do not edit this init script.

# Set run_watchdog to 1 to start watchdog or 0 to disable it.
run_watchdog=0

# Specify additional watchdog options here (see manpage).
watchdog_options=""

# Specify module to load
watchdog_module="none"

[ -e /etc/default/watchdog ] && . /etc/default/watchdog

NAME=watchdog
KEEPALIVE_NAME=wd_keepalive

DAEMON=/usr/sbin/watchdog
KEEPALIVE_DAEMON=/usr/sbin/wd_keepalive

STOP_RETRY_SCHEDULE='TERM/10/forever/KILL/1'

# Get lsb functions
. /lib/lsb/init-functions

case "$1" in
  start)
    if [ $run_watchdog = 1 ]
    then
    	# do we have to load a module?
	[ ${watchdog_module:-none} != "none" ] && /sbin/modprobe $watchdog_module
	# make sure that wd_keepalive is stopped
	log_begin_msg "Stopping watchdog keepalive daemon..."
        start-stop-daemon --stop --quiet --oknodo --retry $STOP_RETRY_SCHEDULE \
            --pidfile /var/run/$KEEPALIVE_NAME.pid
        log_end_msg $?

	# Unconditionally start watchdog daemon because we want to run it even
	# if wd_keepalive wasn't running
	log_begin_msg "Starting watchdog daemon..."
	start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
             --exec $DAEMON -- $watchdog_options
	log_end_msg $?
    fi
    ;;

  stop)
    if [ $run_watchdog = 1 ]
    then
	log_begin_msg "Stopping watchdog daemon..."
	start-stop-daemon --stop --quiet --retry $STOP_RETRY_SCHEDULE \
	    --pidfile /var/run/$NAME.pid
	log_end_msg $?
	# make sure that wd_keepalive is started
	log_begin_msg "Starting watchdog keepalive daemon..."
	start-stop-daemon --start --quiet --pidfile /var/run/$KEEPALIVE_NAME.pid \
	    --exec $KEEPALIVE_DAEMON -- $watchdog_options
	log_end_msg $?
    fi
    ;;

  restart)
    $0 force-reload
    ;;

  force-reload)
    if [ $run_watchdog = 0 ]; then exit 0; fi
    log_daemon_msg "Restarting ${NAME}"
    log_progress_msg "Stopping $NAME daemon..."
    start-stop-daemon --stop --pidfile /var/run/$NAME.pid --quiet \
	--retry $STOP_RETRY_SCHEDULE || log_end_msg $?
    log_progress_msg "Starting $NAME daemon..."
    start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
	--exec $DAEMON -- $watchdog_options
    log_end_msg $?
    ;;

  status)
    status_of_proc "$DAEMON" watchdog
    ;;

  *)
    echo "Usage: /etc/init.d/watchdog {start|stop|restart|force-reload|status}"
    exit 1

esac

exit 0
