Blame | Last modification | View Log | RSS feed
#! /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.statusexport PATH="/usr/local/bin:/usr/bin:/bin"PACKAGE="smartmontools"VERSION="7.1"prefix="/usr"sysconfdir="/etc/smartmontools"smartdscriptdir="${sysconfdir}"# Default maileros_mailer="mail"# Plugin directory (disabled if empty)plugindir="${smartdscriptdir}/smartd_warning.d"# Parse optionsdryrun=case $1 in--dryrun) dryrun=t; shift ;;esacif [ $# != 0 ]; thencat <<EOFsmartd $VERSION warning message scriptUsage: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]EOFexit 1fiif [ -z "${SMARTD_ADDRESS}${SMARTD_MAILER}" ]; thenecho "$0: SMARTD_ADDRESS or SMARTD_MAILER must be set" >&2exit 1fi# Get host and domain namesfor cmd in 'hostname' 'echo "[Unknown]"'; dohostname=`eval $cmd 2>/dev/null` || continuetest -n "$hostname" || continuebreakdonednsdomain=${hostname#*.}if [ "$dnsdomain" != "$hostname" ]; then# hostname command printed FQDNhostname=${hostname%%.*}elsefor cmd in 'dnsdomainname' 'hostname -d' 'echo'; dodnsdomain=`eval $cmd 2>/dev/null` || continuebreakdonetest "$dnsdomain" != "(none)" || dnsdomain=fifor cmd in 'nisdomainname' 'hostname -y' 'domainname' 'echo'; donisdomain=`eval $cmd 2>/dev/null` || continuebreakdonetest "$nisdomain" != "(none)" || nisdomain=# Format subjectexport SMARTD_SUBJECT="SMART error (${SMARTD_FAILTYPE-[SMARTD_FAILTYPE]}) detected on host: $hostname"# Format messagefullmessage=`echo "This message was generated by the smartd daemon running on:"echoecho " host name: $hostname"echo " DNS domain: ${dnsdomain:-[Empty]}"test -z "$nisdomain" ||echo " NIS domain: $nisdomain"#test -z "$USERDOMAIN" ||# echo " Win domain: $USERDOMAIN"echoecho "The following warning/error was logged by the smartd daemon:"echoecho "${SMARTD_MESSAGE-[SMARTD_MESSAGE]}"echoecho "Device info:"echo "${SMARTD_DEVICEINFO-[SMARTD_DEVICEINFO]}"echoecho "For details see host's SYSLOG."if [ "$SMARTD_FAILTYPE" != "EmailTest" ]; thenechoecho "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." ;;esacfi`# Export message with trailing newlineexport SMARTD_FULLMESSAGE="$fullmessage"# Run plugin scripts if requestedif test -n "$plugindir"; thencase " $SMARTD_ADDRESS" in*\ @*)if [ -n "$dryrun" ]; thenecho "export SMARTD_SUBJECT='$SMARTD_SUBJECT'"echo "export SMARTD_FULLMESSAGE='$SMARTD_FULLMESSAGE'"fi# Run ALL scripts if requestedcase " $SMARTD_ADDRESS " in*\ @ALL\ *)for cmd in "$plugindir"/*; doif [ -f "$cmd" ] && [ -x "$cmd" ]; thenif [ -n "$dryrun" ]; thenecho "$cmd </dev/null"else"$cmd" </dev/nullfifidone;;esac# Run selected scriptsaddrs=$SMARTD_ADDRESSSMARTD_ADDRESS=for ad in $addrs; docase $ad in@ALL);;@?*)cmd="$plugindir/${ad#@}"if [ -f "$cmd" ] && [ -x "$cmd" ]; thenif [ -n "$dryrun" ]; thenecho "$cmd </dev/null"else"$cmd" </dev/nullfielif [ ! -e "$cmd" ]; thenecho "$cmd: Not found" >&2fi;;*)SMARTD_ADDRESS="${SMARTD_ADDRESS:+ }$ad";;esacdone# Send email to remaining addressestest -n "$SMARTD_ADDRESS" || exit 0;;esacfi# Send mail or run commandif [ -n "$SMARTD_ADDRESS" ]; then# Send mail, use platform mailer by defaulttest -n "$SMARTD_MAILER" || SMARTD_MAILER=$os_mailerif [ -n "$dryrun" ]; thenecho "exec '$SMARTD_MAILER' -s '$SMARTD_SUBJECT' $SMARTD_ADDRESS <<EOF$fullmessageEOF"elseexec "$SMARTD_MAILER" -s "$SMARTD_SUBJECT" $SMARTD_ADDRESS <<EOF$fullmessageEOFfielif [ -n "$SMARTD_MAILER" ]; then# Run commandif [ -n "$dryrun" ]; thenecho "export SMARTD_SUBJECT='$SMARTD_SUBJECT'"echo "export SMARTD_FULLMESSAGE='$SMARTD_FULLMESSAGE'"echo "exec '$SMARTD_MAILER' </dev/null"elseunset SMARTD_ADDRESSexec "$SMARTD_MAILER" </dev/nullfifi