Annotation of embedaddon/smartmontools/smartd_warning.sh.in, revision 1.1.1.1

1.1       misho       1: #! /bin/sh
                      2: #
                      3: # smartd warning script
                      4: #
                      5: # Copyright (C) 2012-13 Christian Franke <smartmontools-support@lists.sourceforge.net>
                      6: #
                      7: # This program is free software; you can redistribute it and/or modify
                      8: # it under the terms of the GNU General Public License as published by
                      9: # the Free Software Foundation; either version 2, or (at your option)
                     10: # any later version.
                     11: #
                     12: # You should have received a copy of the GNU General Public License
                     13: # (for example COPYING); If not, see <http://www.gnu.org/licenses/>.
                     14: #
                     15: # $Id: smartd_warning.sh.in 3784 2013-03-06 22:02:54Z chrfranke $
                     16: #
                     17: 
                     18: set -e
                     19: 
                     20: # Set by config.status
                     21: PACKAGE="@PACKAGE@"
                     22: VERSION="@VERSION@"
                     23: prefix="@prefix@"
                     24: sysconfdir="@sysconfdir@"
                     25: 
                     26: # Default mailer
                     27: os_mailer="@os_mailer@"
                     28: 
                     29: # Plugin directory
                     30: plugindir="$sysconfdir/smartd_warning.d"
                     31: 
                     32: # Parse options
                     33: dryrun=
                     34: case $1 in
                     35:   --dryrun) dryrun=t; shift ;;
                     36: esac
                     37: 
                     38: if [ $# != 0 ]; then
                     39:   cat <<EOF
                     40: smartd $VERSION warning message script
                     41: 
                     42: Usage:
                     43:   export SMARTD_MAILER='Path to external script, empty for "$os_mailer"'
                     44:   export SMARTD_ADDRESS='Space separated mail adresses, empty if none'
                     45:   export SMARTD_MESSAGE='Error Message'
                     46:   export SMARTD_FAILTYPE='Type of failure, "EMailTest" for tests'
                     47:   export SMARTD_TFIRST='Date of first message sent, empty if none'
                     48:   export SMARTD_TFIRSTEPOCH='time_t format of above'
                     49:   export SMARTD_PREVCNT='Number of previous messages, 0 if none'
                     50:   export SMARTD_NEXTDAYS='Number of days until next message, empty if none'
                     51:   export SMARTD_DEVICEINFO='Device identify information'
                     52:   #export SMARTD_DEVICE='Device name'
                     53:   #export SMARTD_DEVICESTRING='Annotated device name'
                     54:   #export SMARTD_DEVICETYPE='Device type from -d directive, "auto" if none'
                     55:   $0 [--dryrun]
                     56: EOF
                     57:   exit 1
                     58: fi
                     59: 
                     60: if [ -z "${SMARTD_ADDRESS}${SMARTD_MAILER}" ]; then
                     61:   echo "$0: SMARTD_ADDRESS or SMARTD_MAILER must be set" >&2
                     62:   exit 1
                     63: fi
                     64: 
                     65: # Get host and domain names
                     66: for cmd in 'hostname' 'uname -n' 'echo "${HOSTNAME?unset}"' 'echo "[Unknown]"'; do
                     67:   hostname=`eval $cmd 2>/dev/null` || continue
                     68:   test -n "$hostname" || continue
                     69:   break
                     70: done
                     71: 
                     72: dnsdomain=${hostname#*.}
                     73: if [ "$dnsdomain" != "$hostname" ]; then
                     74:   # BSD 'hostname' prints FQDN
                     75:   hostname=${hostname%%.*}
                     76: else
                     77:   #           Linux           Cygwin
                     78:   for cmd in 'dnsdomainname' 'echo "${USERDNSDOMAIN?unset}"' 'echo'; do
                     79:     dnsdomain=`eval $cmd 2>/dev/null` || continue
                     80:     break
                     81:   done
                     82: fi
                     83: 
                     84: for cmd in 'nisdomainname' 'ypdomainname' 'domainname' 'echo'; do
                     85:   nisdomain=`eval $cmd 2>/dev/null` || continue
                     86:   break
                     87: done
                     88: test "$nisdomain" != "(none)" || nisdomain=
                     89: 
                     90: case $OS in
                     91:   Windows*) windomain=$USERDOMAIN ;;
                     92:   *)        windomain= ;;
                     93: esac
                     94: 
                     95: # Format subject
                     96: export SMARTD_SUBJECT="SMART error (${SMARTD_FAILTYPE-[SMARTD_FAILTYPE]}) detected on host: $hostname"
                     97: 
                     98: # Format message
                     99: fullmessage=`
                    100:   echo "This message was generated by the smartd daemon running on:"
                    101:   echo
                    102:   echo "   host name:  $hostname"
                    103:   echo "   DNS domain: ${dnsdomain:-[Empty]}"
                    104:   test -z "$nisdomain" ||
                    105:     echo "   NIS domain: $nisdomain"
                    106:   test -z "$windomain" ||
                    107:     echo "   Win domain: $windomain"
                    108:   echo
                    109:   echo "The following warning/error was logged by the smartd daemon:"
                    110:   echo
                    111:   echo "${SMARTD_MESSAGE-[SMARTD_MESSAGE]}"
                    112:   echo
                    113:   echo "Device info:"
                    114:   echo "${SMARTD_DEVICEINFO-[SMARTD_DEVICEINFO]}"
                    115:   echo
                    116:   echo "For details see host's SYSLOG."
                    117:   if [ "$SMARTD_FAILTYPE" != "EmailTest" ]; then
                    118:     echo
                    119:     echo "You can also use the smartctl utility for further investigation."
                    120:     test "$SMARTD_PREVCNT" = "0" ||
                    121:       echo "The original message about this issue was sent at ${SMARTD_TFIRST-[SMARTD_TFIRST]}"
                    122:     case $SMARTD_NEXTDAYS in
                    123:       '') echo "No additional messages about this problem will be sent." ;;
                    124:       1)  echo "Another message will be sent in 24 hours if the problem persists." ;;
                    125:       *)  echo "Another message will be sent in $SMARTD_NEXTDAYS days if the problem persists." ;;
                    126:     esac
                    127:   fi
                    128: `
                    129: 
                    130: # Export message with trailing newline
                    131: export SMARTD_FULLMESSAGE="$fullmessage
                    132: "
                    133: 
                    134: # Run plugin scripts if requested
                    135: case " $SMARTD_ADDRESS" in
                    136:   *\ @*)
                    137:     if [ -n "$dryrun" ]; then
                    138:       echo "export SMARTD_SUBJECT='$SMARTD_SUBJECT'"
                    139:       echo "export SMARTD_FULLMESSAGE='$SMARTD_FULLMESSAGE'"
                    140:     fi
                    141: 
                    142:     # Run ALL scripts if requested
                    143:     case " $SMARTD_ADDRESS " in
                    144:       *\ @ALL\ *)
                    145:         for cmd in "$plugindir"/*; do
                    146:           if [ -f "$cmd" ] && [ -x "$cmd" ]; then
                    147:             if [ -n "$dryrun" ]; then
                    148:               echo "$cmd </dev/null"
                    149:             else
                    150:               "$cmd" </dev/null
                    151:             fi
                    152:           fi
                    153:         done
                    154:         ;;
                    155:     esac
                    156: 
                    157:     # Run selected scripts
                    158:     addrs=$SMARTD_ADDRESS
                    159:     SMARTD_ADDRESS=
                    160:     for ad in $addrs; do
                    161:       case $ad in
                    162:         @ALL)
                    163:           ;;
                    164:         @?*)
                    165:           cmd="$plugindir/${ad#@}"
                    166:           if [ -f "$cmd" ] && [ -x "$cmd" ]; then
                    167:             if [ -n "$dryrun" ]; then
                    168:               echo "$cmd </dev/null"
                    169:             else
                    170:               "$cmd" </dev/null
                    171:             fi
                    172:           elif [ ! -e "$cmd" ]; then
                    173:             echo "$cmd: Not found" >&2
                    174:           fi
                    175:           ;;
                    176:         *)
                    177:           SMARTD_ADDRESS="${SMARTD_ADDRESS:+ }$ad"
                    178:           ;;
                    179:       esac
                    180:     done
                    181: 
                    182:     # Send email to remaining addresses
                    183:     test -n "$SMARTD_ADDRESS" || exit 0
                    184:     ;;
                    185: esac
                    186: 
                    187: # Send mail or run command
                    188: if [ -n "$SMARTD_ADDRESS" ]; then
                    189: 
                    190:   # Send mail, use platform mailer by default
                    191:   test -n "$SMARTD_MAILER" || SMARTD_MAILER=$os_mailer
                    192:   if [ -n "$dryrun" ]; then
                    193:     echo "exec '$SMARTD_MAILER' -s '$SMARTD_SUBJECT' $SMARTD_ADDRESS <<EOF
                    194: $fullmessage
                    195: EOF"
                    196:   else
                    197:     exec "$SMARTD_MAILER" -s "$SMARTD_SUBJECT" $SMARTD_ADDRESS <<EOF
                    198: $fullmessage
                    199: EOF
                    200:   fi
                    201: 
                    202: elif [ -n "$SMARTD_MAILER" ]; then
                    203: 
                    204:   # Run command
                    205:   if [ -n "$dryrun" ]; then
                    206:     echo "export SMARTD_SUBJECT='$SMARTD_SUBJECT'"
                    207:     echo "export SMARTD_FULLMESSAGE='$SMARTD_FULLMESSAGE'"
                    208:     echo "exec '$SMARTD_MAILER' </dev/null"
                    209:   else
                    210:     unset SMARTD_ADDRESS
                    211:     exec "$SMARTD_MAILER" </dev/null
                    212:   fi
                    213: 
                    214: fi

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>