#! /bin/sh
# Copyright (c) 1995-1998 SuSE GmbH Nuernberg, Germany.
#
# Author: Thorsten Bonow (Toto) <tb@lmbau.rwth-aachen.de>, 2000
# Based on example /sbin/init.d/skeleton=20
#
# /sbin/init.d/<watchdog.toto>
#
#   and symbolic its link
#
# /sbin/rc<watchdog.toto>
#

. /etc/rc.config

# Determine the base and follow a runlevel link name.
base=${0##*/}
link=${base#*[SK][0-9][0-9]}

# Force execution if not called by a runlevel directory.
test $link = $base && START_FOO=yes
#
# Up to now, there is no support for watchdog in the main SuSE=20
# configuration file /etc/rc.config, read by the YaST setup tool
#
# It would look that way in /etc/rc.config:
#
# START_WATCHDOG=yes=20
#
# Then you could use here in this script:
# test "$START_WATCHDOG" = yes || exit 0

# The echo return value for success (defined in /etc/rc.config).
return=$rc_done
case "$1" in
    start)
	echo -n "Starting watchdog daemon"
	## Start daemon with startproc(8). If this fails
	## the echo return value is set appropriate.

	startproc /usr/sbin/watchdog --softboot || return=$rc_failed

	echo -e "$return"
	;;
    stop)
	echo -n "Shutting down watchdog daemon"
	## Stop daemon with killproc(8) and if this fails
	## set echo the echo return value.

	killproc -TERM /usr/sbin/watchdog || return=$rc_failed

	echo -e "$return"
	;;
    restart)
	## If first returns OK call the second, if first or
	## second command fails, set echo return value.
	$0 stop  &&  $0 start  ||  return=$rc_failed
	;;
    reload)
	## Choose ONE of the following two cases:

	## First possibility: A few services accepts a signal
	## to reread the (changed) configuration.

	#echo -n "Reload watchdog daemon"
	#killproc -HUP /usr/sbin/watchdog || return=$rc_failed
	#echo -e "$return"

	## Exclusive possibility: Some services must be stopped
	## and started to force a new load of the configuration.

	$0 stop  &&  $0 start  ||  return=$rc_failed
	;;
    status)
	echo -n "Checking for watchdog daemon: "
	## Check status with checkproc(8), if process is running
	## checkproc will return with exit status 0.

	checkproc /usr/sbin/watchdog && echo OK || echo No process
	;;
    probe)
	## Optional: Probe for the necessity of a reload,
	## give out the argument which is required for a reload.

	#test /etc/foo.conf -nt /var/run/foo.pid && echo reload
	;;
    *)
	echo "Usage: $0 {start|stop|status|restart|reload[|probe]}"
	exit 1
	;;
esac

# Inform the caller not only verbosely and set an exit status.
test "$return" = "$rc_done" || exit 1
exit 0
