Annotation of embedaddon/smartmontools/smartd_warning.sh.in, revision 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>