Package: mpt-status Version: 1.2.0-6 Severity: normal At line 15 of /etc/init.d/mpt-statusd in mpt-status 1.2.0-6 is included the bash internal command:
set -e Code around line 67 of /etc/init.d/mpt-statusd in mpt-status 1.2.0-6 is: if [ true = "$BADRAID" ] ; then # RAID not OK (mpt-status -i $ID) > $STATUSFILE.new if [ ! -f $STATUSFILE ] ; then # RAID just became broken When any abnormal condition is detected by mpt-status, its return code is non- zero. This exits immediately the pipeline intended to update the $STATUSFILE.new file, aborting the whole check_mpt loop. The quickest (and poorest) workaround is enclosing the test line in a sort of jail, to immunize the outer script from exiting while a real abnormal condition is detected if [ true = "$BADRAID" ] ; then # RAID not OK set +e (mpt-status -i $ID) > $STATUSFILE.new set -e if [ ! -f $STATUSFILE ] ; then # RAID just became broken -- System Information: Debian Release: squeeze/sid APT prefers testing APT policy: (500, 'testing') Architecture: amd64 (x86_64) Kernel: Linux 2.6.32-trunk-amd64 (SMP w/4 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages mpt-status depends on: ii daemon 0.6.4-1 turns other processes into daemons ii libc6 2.11.2-2 Embedded GNU C Library: Shared lib ii lsb-base 3.2-23.1 Linux Standard Base 3.2 init scrip mpt-status recommends no packages. Versions of packages mpt-status suggests: ii bsd-mailx [mailx] 8.1.2-0.20100314cvs-1 simple mail user agent ii heirloom-mailx [ma 12.4-2 feature-rich BSD mail(1) -- Configuration Files: /etc/init.d/mpt-statusd changed: set -e PATH=/sbin:/bin:/usr/sbin:/usr/bin DESC="mpt-status monitor" NAME=mpt-statusd PIDFILE=/var/run/$NAME.pid STATUSFILE=/var/run/$NAME.status SCRIPTNAME=/etc/init.d/$NAME MAILTO=root # Where to report problems PERIOD=600 # Seconds between each check (default 10 minutes) REMIND=7200 # Seconds between each reminder (default 2 hours) RUN_DAEMON=yes ID=0 [ -e /etc/default/mpt-statusd ] && . /etc/default/mpt-statusd test -x /usr/sbin/mpt-status || exit 0 . /lib/lsb/init-functions [ -e /etc/default/rcS ] && . /etc/default/rcS if [ $RUN_DAEMON = "no" ] ; then log_begin_msg "mpt-statusd is disabled in /etc/default/mpt-statusd, not starting." log_end_msg 0 exit 0 fi if ! [ -e "/proc/mpt/version" ] ; then log_failure_msg "The mptctl module is missing. Please have a look at the README.Debian.gz." log_end_msg 0 exit 0 fi check_mpt() { echo $$ > $PIDFILE.new && mv $PIDFILE.new $PIDFILE while true ; do # Check ever $PERIOD seconds, send email on every status # change and repeat ever $REMIND seconds if the raid is still # bad. if (mpt-status -i $ID) |grep -q 'state OPTIMAL' ; then BADRAID=false else BADRAID=true logger -t mpt-statusd "detected non-optimal RAID status" fi STATUSCHANGE=false if [ true = "$BADRAID" ] ; then # RAID not OK set +e (mpt-status -i $ID) > $STATUSFILE.new set -e if [ ! -f $STATUSFILE ] ; then # RAID just became broken STATUSCHANGE=true mv $STATUSFILE.new $STATUSFILE elif cmp -s $STATUSFILE $STATUSFILE.new ; then # No change. Should we send reminder? LASTTIME="`stat -c '%Z' $STATUSFILE`" NOW="`date +%s`" SINCELAST="`expr $NOW - $LASTTIME`" if [ $REMIND -le "$SINCELAST" ]; then # Time to send reminder STATUSCHANGE=true mv $STATUSFILE.new $STATUSFILE else rm $STATUSFILE.new fi else STATUSCHANGE=true mv $STATUSFILE.new $STATUSFILE fi else # RAID OK if [ -f $STATUSFILE ] ; then rm $STATUSFILE STATUSCHANGE=true fi fi if [ true = "$STATUSCHANGE" ]; then hostname="`uname -n`" ( cat <<EOF This is a RAID status update from mpt-statusd. The mpt-status program reports that one of the RAIDs changed state: EOF if [ -f $STATUSFILE ] ; then cat $STATUSFILE else (mpt-status -i $ID) fi echo echo "Report from $0 on $hostname" ) | mail -s "info: mpt raid status change on $hostname" $MAILTO fi sleep $PERIOD done } check_daemon() { # Let's check if there is a daemon which is really running and not timing out DAEMON_RUN=`ps aux | grep "/etc/init.d/mpt-statusd check_mpt" | grep -v grep | grep -v daemon` if [ -n "$DAEMON_RUN" ] ; then return 1; else return 0; fi } d_start() { [ -f $PIDFILE ] && PID="`cat $PIDFILE`" if [ "$PID" ] ; then log_progress_msg "Daemon already running. Refusing to start another" return 0 elif check_daemon ; then # Use the daemon package to turn this script into a daemon start-stop-daemon --start --quiet --pidfile $PIDFILE \ --oknodo --exec /usr/bin/daemon /usr/bin/daemon $SCRIPTNAME check_mpt return 0 else log_progress_msg "Daemon is already running. Refusing to start another" return 0 fi } d_stop() { if [ -f $PIDFILE ] ; then start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE rm -f $PIDFILE return 0 else log_progress_msg "Daemon is already stopped." return 0 fi } d_stop_by_restart() { if [ -f $PIDFILE ] ; then start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE rm -f $PIDFILE log_end_msg 0 else log_progress_msg "Daemon is already stopped." log_end_msg 0 fi } case "$1" in start) echo -n "" log_begin_msg "Starting $DESC: $NAME" d_start ; CODE=$? log_end_msg $CODE ;; stop) log_begin_msg "Stopping $DESC: $NAME" d_stop ; CODE=$? log_end_msg $CODE ;; check_mpt) check_mpt ;; restart|force-reload) log_begin_msg "Restarting $DESC: $NAME" d_stop_by_restart sleep 1 d_start || CODE=$? log_end_msg $CODE ;; *) # echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2 exit 1 ;; esac exit 0 -- no debconf information -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org