#!/usr/bin/env bash # usage usage() { USAGE=$(cat <'. EOF ) echo "$USAGE"; } set -e; SMARTCTL_TESTS_LONG_MAIL_ADDRESS=""; SMARTCTL_TESTS_LONG_DEVICES=(sda) # check for config file apply_config() { local config=$1; if [[ ! -f "$config" ]]; then echo "No config file specified"; echo ""; usage; exit 1; fi set -a; # shellcheck disable=SC1090 source "$config"; set +a; } source_config() { local config=$1; local configFallback=$2; local configGlobalFallback=$3; if [[ -f "$config" ]]; then apply_config "$config"; return; fi if [[ -f "$configFallback" ]]; then apply_config "$configFallback"; return; fi if [[ -f "$configGlobalFallback" ]]; then apply_config "$configGlobalFallback"; return; fi } check_required() { type hostname &> /dev/null || { echo "Requiring 'hostname' but it's not installed"; exit 1; } type mailx &> /dev/null || { echo "Requiring 'mailx' but it's not installed"; exit 1; } type smartctl &> /dev/null || { echo "Requiring 'smartctl' but it's not installed"; exit 1; } } source_config "$1" "$HOME/.smartctl_tests_long.conf" "/etc/smartctl_tests_long.conf" HOSTNAME=$(hostname) echo "Starting long tests for ..."; for d in "${SMARTCTL_TESTS_LONG_DEVICES[@]}"; do DEVICE="/dev/$d"; echo "$DEVICE"; smartctl -t long "$DEVICE"; mailx -s "[smartd $HOSTNAME] queued long test" "$SMARTCTL_TESTS_LONG_MAIL_ADDRESS" << EOF Queued a smartd long test for $DEVICE. EOF done