mirror of
https://git.proxmox.com/git/mirror_smartmontools-debian
synced 2025-08-16 10:22:50 +00:00

Downloaded source from https://sourceforge.net/projects/smartmontools/files/smartmontools/7.0/ and imported here to git. Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
210 lines
5.5 KiB
Bash
210 lines
5.5 KiB
Bash
#! /bin/sh
|
|
#
|
|
# smartd warning script
|
|
#
|
|
# Home page of code is: http://www.smartmontools.org
|
|
#
|
|
# Copyright (C) 2012-16 Christian Franke
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
#
|
|
# $Id: smartd_warning.sh.in 4839 2018-11-27 18:26:08Z chrfranke $
|
|
#
|
|
|
|
set -e
|
|
|
|
# Set by config.status
|
|
@ENABLE_SCRIPTPATH_TRUE@export PATH="@scriptpath@"
|
|
PACKAGE="@PACKAGE@"
|
|
VERSION="@VERSION@"
|
|
prefix="@prefix@"
|
|
sysconfdir="@sysconfdir@"
|
|
smartdscriptdir="@smartdscriptdir@"
|
|
|
|
# Default mailer
|
|
os_mailer="@os_mailer@"
|
|
|
|
# Plugin directory (disabled if empty)
|
|
plugindir="@smartdplugindir@"
|
|
|
|
# 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 addresses, 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 @os_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 @os_dnsdomainname@ 'echo'; do
|
|
dnsdomain=`eval $cmd 2>/dev/null` || continue
|
|
break
|
|
done
|
|
test "$dnsdomain" != "(none)" || dnsdomain=
|
|
fi
|
|
|
|
for cmd in @os_nisdomainname@ '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"
|
|
@OS_WIN32_TRUE@test -z "$USERDOMAIN" ||
|
|
@OS_WIN32_TRUE@ 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
|
|
if test -n "$plugindir"; then
|
|
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
|
|
fi
|
|
|
|
# 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
|