3 # Author: Petter Reinholdtsen <pere@hungry.com>
4 # License: GNU General Public License v2 or later
6 # mpt-statusd - Check mpt-status values in the background.
9 # description: Check mpt-status values in the background \
10 # using daemonize and the mpt-status utility.
13 # Provides: mpt-statusd
14 # Required-Start: $remote_fs $syslog
15 # Required-Stop: $remote_fs $syslog
16 # Default-Start: 2 3 4 5
18 # Short-Description: Check mpt-status values in the background.
21 PATH=/sbin:/bin:/usr/sbin:/usr/bin
22 DESC="mpt-status monitor"
24 PIDFILE=/var/run/$NAME.pid
25 STATUSFILE=/var/run/$NAME.status
26 SCRIPTNAME=/etc/init.d/$NAME
29 # Do not touch you can configure this in /etc/default/mpt-statusd
30 MAILTO=root # Where to report problems
31 PERIOD=600 # Seconds between each check (default 10 minutes)
32 REMIND=7200 # Seconds between each reminder (default 2 hours)
36 [ -e /etc/default/mpt-statusd ] && . /etc/default/mpt-statusd
38 # Gracefully exit if the package has been removed.
39 test -x /usr/sbin/mpt-status || exit 0
41 # Source function library.
42 . /etc/rc.d/init.d/functions
43 . /lib/lsb/init-functions
45 if [ $RUN_DAEMON = "no" ] ; then
46 log_failure_msg $"mpt-statusd is disabled in /etc/default/mpt-statusd, not starting."
50 #if ! [ -e "/proc/mpt/version" ] ; then
51 # log_failure_msg "The mptctl module is missing."
56 echo $$ > $PIDFILE.new && mv $PIDFILE.new $PIDFILE
58 # Check ever $PERIOD seconds, send email on every status
59 # change and repeat ever $REMIND seconds if the raid is still
61 if (mpt-status -i $ID) |grep -q 'state OPTIMAL' ; then
65 logger -t mpt-statusd "detected non-optimal RAID status"
68 if [ true = "$BADRAID" ] ; then
70 (mpt-status -i $ID) > $STATUSFILE.new
71 if [ ! -f $STATUSFILE ] ; then # RAID just became broken
73 mv $STATUSFILE.new $STATUSFILE
74 elif cmp -s $STATUSFILE $STATUSFILE.new ; then
75 # No change. Should we send reminder?
76 LASTTIME="`stat -c '%Z' $STATUSFILE`"
78 SINCELAST="`expr $NOW - $LASTTIME`"
79 if [ $REMIND -le "$SINCELAST" ]; then
80 # Time to send reminder
82 mv $STATUSFILE.new $STATUSFILE
88 mv $STATUSFILE.new $STATUSFILE
92 if [ -f $STATUSFILE ] ; then
98 if [ true = "$STATUSCHANGE" ]; then
102 This is a RAID status update from mpt-statusd. The mpt-status
103 program reports that one of the RAIDs changed state:
106 if [ -f $STATUSFILE ] ; then
112 echo "Report from $0 on $hostname"
113 ) | mail -s "info: mpt raid status change on $hostname" $MAILTO
120 # Let's check if there is a daemon which is really running and not timing out
121 DAEMON_RUN=`ps aux | grep "/etc/init.d/mpt-statusd check_mpt" | grep -v grep | grep -v daemon`
122 if [ -n "$DAEMON_RUN" ] ; then
130 # Function that starts the daemon/service.
133 [ -f $PIDFILE ] && PID="`cat $PIDFILE`"
135 log_warning_msg "Daemon already running. Refusing to start another"
137 elif check_daemon ; then
138 # Use daemonize to turn it into a daemon and start it with daemon().
139 daemon --pidfile $PIDFILE /usr/sbin/daemonize $SCRIPTNAME check_mpt
142 log_warning_msg "Daemon is already running. Refusing to start another"
148 # Function that stops the daemon/service.
151 if [ -f $PIDFILE ] ; then
152 killproc -p $PIDFILE $SCRIPTNAME > /dev/null 2>&1
155 log_warning_msg "Daemon is already stopped."
160 # This is a workaround function which does not directly exit and
161 # therefore can be used by a restart
162 d_stop_by_restart() {
163 if [ -f $PIDFILE ] ; then
164 killproc -p $PIDFILE $SCRIPTNAME > /dev/null 2>&1
167 log_warning_msg "Daemon is already stopped."
174 echo -n $"Starting $DESC: $NAME"
178 log_begin_msg "Stopping $DESC: $NAME"
184 restart|force-reload)
185 echo -n "Restarting $DESC: $NAME"
191 echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2