Created
May 22, 2021 23:58
-
-
Save utarn/f5540ba9c5e3d09ccd934bba4315ba3f to your computer and use it in GitHub Desktop.
Smartmontool for centos 8 using Gmail amd msmtp
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# path /etc/msmtprc | |
defaults | |
auth on | |
tls on | |
tls_trust_file /etc/ssl/certs/ca-bundle.crt | |
logfile /var/log/msmtp.log | |
# Gmail configuration | |
account gmail | |
host smtp.gmail.com | |
port 587 | |
from <YOUR_GMAIL> | |
user <YOUR_GMAIL> | |
password <YOURPASSWORD> | |
account default: gmail |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /bin/sh | |
# path /etc/smartmontools/ | |
# | |
# 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.1" | |
prefix="/usr" | |
sysconfdir="/etc/smartmontools" | |
smartdscriptdir="${sysconfdir}" | |
# Default mailer | |
os_mailer="msmtp" | |
# 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 | |
# 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 -a default $SMARTD_ADDRESS <<EOF | |
To: $SMARTD_ADDRESS | |
From: $(whoami)@$HOSTNAME | |
Subject: $SMARTD_SUBJECT | |
$fullmessage | |
EOF" | |
else | |
exec $SMARTD_MAILER -a default $SMARTD_ADDRESS <<EOF | |
To: $SMARTD_ADDRESS | |
From: $(whoami)@$HOSTNAME | |
Subject: $SMARTD_SUBJECT | |
$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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment