Files
restic-automatic-backup-sch…/systemd-email
Erik Westrup aa7fdd0df9 Initial commit
2018-04-13 20:36:20 +02:00

62 lines
1.9 KiB
Bash

#!/usr/bin/env sh
# Send email notification from systemd.
# Source: https://serverfault.com/questions/876233/how-to-send-an-email-if-a-systemd-service-is-restarted
# Source: https://wiki.archlinux.org/index.php/Systemd/Timers#MAILTO
# Usage: systemd-email <recipinent-email> <failed-systemd-unit-name>
# According to
# http://www.flashissue.com/blog/gmail-sending-limits/
# Gmail blocks your account if you send more than 500 emails per day, which is one email every
# (24 * 60 * 60) / 500 = 172.8 second => choose a min wait time which is significantly longer than this to be on the safe time to not exceed 500 emails per day.
# However this source
# https://group-mail.com/sending-email/email-send-limits-and-options/
# says the limit when not using the Gmail webinterface but going directly to the SMTP server is 100-150 per day, which yelds maximum one email every
# (24 * 60 * 60) / 100 = 864 second
# One option that I used with my old Axis cameras it to use my gmx.com accunt for sending emails instead, as there are (no?) higher limits there.
MIN_WAIT_TIME_S=900
SCRIPT_NAME=$(basename $0)
LAST_RUN_FILE="/tmp/${SCRIPT_NAME}_last_run.txt"
last_touch() {
stat -c %Y $1
}
waited_long_enough() {
retval=1
if [ -e $LAST_RUN_FILE ]; then
now=$(date +%s)
last=$(last_touch $LAST_RUN_FILE)
wait_s=$(expr $now - $last)
if [ "$wait_s" -gt "$MIN_WAIT_TIME_S" ]; then
retval=0
fi
else
retval=0
fi
[ $retval -eq 0 ] && touch $LAST_RUN_FILE
return $retval
}
# Make sure that my Gmail account dont' get shut down because of sending too many emails!
if ! waited_long_enough; then
echo "Systemd email was not sent, as it's less than ${MIN_WAIT_TIME_S} seconds since the last one was sent."
exit 1
fi
recipinent=$1
system_unit=$2
sendmail -t <<ERRMAIL
To: $recipinent
From: systemd <root@$HOSTNAME>
Subject: [systemd-email] ${system_unit}
Content-Transfer-Encoding: 8bit
Content-Type: text/plain; charset=UTF-8
$(systemctl status --full "$system_unit")
ERRMAIL