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