#!/bin/sh
#
# Start the MD monitor daemon for all active MD arrays if desired.
#
### BEGIN INIT INFO
# Provides:          mdadm
# Required-Start:    $local_fs $syslog mdadm-raid
# Required-Stop:     $local_fs $syslog mdadm-raid
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: MD monitoring daemon
# Description:       mdadm provides a monitor mode, in which it will scan for
#                    problems with the MD devices. If a problem is found, the
#                    administrator is alerted via email, or a custom script is
#                    run.
### END INIT INFO
#

MDADM=/sbin/mdadm
RUNDIR=/var/run/mdadm
PIDFILE=$RUNDIR/monitor.pid
DEBIANCONFIG=/etc/default/mdadm

test -x "$MDADM" || exit 0

test -f /proc/mdstat || exit 0

START_DAEMON=true
test -f $DEBIANCONFIG && . $DEBIANCONFIG

. /lib/lsb/init-functions

# Include functions
. /etc/init.d/functions

case "${1:-}" in
  start)
    if is_true $START_DAEMON; then
      log_daemon_msg "Starting MD monitoring service" "mdadm --monitor"
      mkdir -p $RUNDIR
      start-stop-daemon -S -p $PIDFILE -x $MDADM -- \
        --monitor --pid-file $PIDFILE --daemonise --scan ${DAEMON_OPTIONS:-}
      RETVAL=$?
      log_end_msg $RETVAL
      exit $RETVAL
    fi
    ;;
  stop)
    if [ -f $PIDFILE ] ; then
      log_daemon_msg "Stopping MD monitoring service" "mdadm --monitor"
      start-stop-daemon -K -p $PIDFILE -x $MDADM
      RETVAL=$?
      rm -f $PIDFILE
      log_end_msg $RETVAL
      exit $RETVAL
    fi
    ;;
  status)
    status -p $PIDFILE "$MDADM" && exit 0 || exit $?
    ;;
  restart|reload|force-reload)
    ${0:-} stop
    ${0:-} start
    ;;
  *)
    echo "Usage: ${0:-} {start|stop|status|restart|reload|force-reload}" >&2
    exit 1
    ;;
esac

exit 0

