60 lines
1.9 KiB
Bash
60 lines
1.9 KiB
Bash
|
#!/bin/sh
|
||
|
#
|
||
|
# Send email to ZED_EMAIL in response to a given zevent.
|
||
|
# This is a generic script than can be symlinked to a file in the zed
|
||
|
# enabled-scripts directory in order to have email sent when a particular
|
||
|
# class of zevents occurs. The symlink filename must begin with the zevent
|
||
|
# (sub)class string (eg, "probe_failure-email.sh" for the "probe_failure"
|
||
|
# subclass). Refer to the zed(8) manpage for details.
|
||
|
# Exit codes:
|
||
|
# 0: email sent
|
||
|
# 1: email failed
|
||
|
# 2: email suppressed
|
||
|
# 3: missing executable
|
||
|
#
|
||
|
test -f "${ZED_SCRIPT_DIR}/zed.rc" && . "${ZED_SCRIPT_DIR}/zed.rc"
|
||
|
|
||
|
# Only send email if ZED_EMAIL has been configured.
|
||
|
test -n "${ZED_EMAIL}" || exit 2
|
||
|
|
||
|
# Ensure requisite executables are installed.
|
||
|
if ! command -v "${MAIL:=mail}" >/dev/null 2>&1; then
|
||
|
logger -t "${ZED_SYSLOG_TAG:=zed}" \
|
||
|
-p "${ZED_SYSLOG_PRIORITY:=daemon.warning}" \
|
||
|
`basename "$0"`: "${MAIL}" not installed
|
||
|
exit 3
|
||
|
fi
|
||
|
|
||
|
# Override the default umask to restrict access to the msgbody tmpfile.
|
||
|
umask 077
|
||
|
|
||
|
SUBJECT="ZFS ${ZEVENT_SUBCLASS} event"
|
||
|
test -n "${ZEVENT_POOL}" && SUBJECT="${SUBJECT} for ${ZEVENT_POOL}"
|
||
|
SUBJECT="${SUBJECT} on `hostname`"
|
||
|
|
||
|
MSGBODY="${TMPDIR:=/tmp}/`basename \"$0\"`.$$"
|
||
|
{
|
||
|
echo "A ZFS ${ZEVENT_SUBCLASS} event has been posted:"
|
||
|
echo
|
||
|
echo " eid: ${ZEVENT_EID}"
|
||
|
echo " host: `hostname`"
|
||
|
echo " time: ${ZEVENT_TIME_STRING}"
|
||
|
test -n "${ZEVENT_VDEV_TYPE}" -a -n "${ZEVENT_VDEV_PATH}" && \
|
||
|
echo " vdev: ${ZEVENT_VDEV_TYPE}:${ZEVENT_VDEV_PATH}"
|
||
|
test -n "${ZEVENT_POOL}" -a -x "${ZPOOL}" && \
|
||
|
"${ZPOOL}" status "${ZEVENT_POOL}"
|
||
|
} > "${MSGBODY}"
|
||
|
|
||
|
test -f "${MSGBODY}" && "${MAIL}" -s "${SUBJECT}" "${ZED_EMAIL}" < "${MSGBODY}"
|
||
|
MAIL_STATUS=$?
|
||
|
rm -f "${MSGBODY}"
|
||
|
|
||
|
if test "${MAIL_STATUS}" -ne 0; then
|
||
|
logger -t "${ZED_SYSLOG_TAG:=zed}" \
|
||
|
-p "${ZED_SYSLOG_PRIORITY:=daemon.warning}" \
|
||
|
`basename "$0"`: "${MAIL}" exit="${MAIL_STATUS}"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
exit 0
|