68 lines
1.4 KiB
Bash
Executable file
68 lines
1.4 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
# usage
|
|
usage() {
|
|
USAGE=$(cat <<EOF
|
|
Usage: systemd_failure_notify [SERVICE]
|
|
|
|
Sends out notifications for failed services. Please see man systemd_failure_notify.
|
|
EOF
|
|
)
|
|
echo "$USAGE";
|
|
}
|
|
|
|
set -e;
|
|
|
|
SYSTEMD_FAILURE_NOTIFY_SERVICE=$1
|
|
if [ -z "$SYSTEMD_FAILURE_NOTIFY_SERVICE" ]; then
|
|
echo "No service given";
|
|
echo "";
|
|
usage;
|
|
exit 1;
|
|
fi
|
|
|
|
# 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;
|
|
}
|
|
|
|
check_requirements() {
|
|
type whoami &> /dev/null || { echo "Requiring 'whoami' but it's not installed"; exit 1; }
|
|
}
|
|
|
|
source_config() {
|
|
local configFallback=$1;
|
|
local configGlobalFallback=$2;
|
|
|
|
if [[ -f "$configFallback" ]]; then
|
|
apply_config "$configFallback";
|
|
return;
|
|
fi
|
|
|
|
if [[ -f "$configGlobalFallback" ]]; then
|
|
apply_config "$configGlobalFallback";
|
|
return;
|
|
fi
|
|
}
|
|
source_config "$HOME/.systemd_failure_notify.conf" "/etc/systemd_failure_notify.conf"
|
|
check_requirements
|
|
|
|
SYSTEMD_FAILURE_NOTIFY_HOSTNAME=$(hostname)
|
|
SYSTEMD_FAILURE_NOTIFY_USER=$(whoami)
|
|
|
|
SUBJECT="[systemd $SYSTEMD_FAILURE_NOTIFY_HOSTNAME for $SYSTEMD_FAILURE_NOTIFY_USER] $SYSTEMD_FAILURE_NOTIFY_USER RUN FAILED"
|
|
MESSAGE="$SYSTEMD_FAILURE_NOTIFY_SERVICE run failed"
|
|
|
|
notifier "${SUBJECT}" "${MESSAGE}"
|