#!/usr/bin/env bash set -euo pipefail # This script is meant to be executed as a cron by executing Nagios # NRPE plugin check_hpraid and notify by mail any errors TMPDIR=/tmp md5sum=$(command -v md5sum) awk=$(command -v awk) check_hpraid="/usr/local/lib/nagios/plugins/check_hpraid -v -p" check_hpraid_output=$(mktemp -p $TMPDIR check_hpraid_XXX) check_hpraid_last="$TMPDIR/check_hpraid_last" # set to false to use cron output (MAILTO) # otherwise send output with mail command use_mail=true body=$(mktemp --tmpdir=/tmp check_hpraid_XXX) clientmail=$(grep EVOMAINTMAIL /etc/evomaintenance.cf | cut -d'=' -f2) hostname=$(grep HOSTNAME /etc/evomaintenance.cf | cut -d'=' -f2) hostname=${hostname%%.evolix.net} # If hostname is composed with -, remove the first part. if [[ $hostname =~ "-" ]]; then hostname=$(echo "$hostname" | cut -d'-' -f2-) fi trap trapFunc EXIT ERR testDeps() { test -x "$md5sum" || (echo "md5sum binary not found"; exit 1) test -x "$awk" || (echo "awk binary not found"; exit 1) } main() { if ! $check_hpraid > "$check_hpraid_output"; then error=true else error=false fi # If check_hpraid returned error, display output, save status and # exit if $error; then cp "$check_hpraid_output" "$check_hpraid_last" if $use_mail; then mail -s "RAID error on $hostname" "$clientmail" \ <<< "$check_hpraid_output" else cat "$check_hpraid_output" fi exit 1 else cp "$check_hpraid_output" $check_hpraid_last exit 0 fi if [ ! -f $check_hpraid_last ]; then cp "$check_hpraid_output" $check_hpraid_last fi # If output and last check is different, display differences and # exit md5_now=$(md5sum "$check_hpraid_output" | awk '{print $1}') md5_last=$(md5sum $check_hpraid_last | awk '{print $1}') if [[ "$md5_now" != "$md5_last" ]]; then cat << EOT > "$body" Different RAID state detected. Was: $(sed 's/^/> /g' "$check_hpraid_last") ########################### Is now: $(sed 's/^/> /g' "$check_hpraid_output") EOT if $use_mail; then mail -s "RAID status is different on $hostname" \ "$clientmail" <<< "$body" else cat "$body" fi cp "$check_hpraid_output" "$check_hpraid_last" exit 1 fi } trapFunc() { rm "$check_hpraid_output" "$body" } testDeps main