GIF89a;
Direktori : /etc/smartmontools/ |
Current File : //etc/smartmontools/smartd_warning.sh |
#! /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 export PATH="/usr/local/bin:/usr/bin:/bin" PACKAGE="smartmontools" VERSION="7.0" prefix="/usr" sysconfdir="/etc/smartmontools" smartdscriptdir="${sysconfdir}" # Default mailer os_mailer="mail" # Plugin directory (disabled if empty) plugindir="${smartdscriptdir}/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 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 '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 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