E-Mail Benachrichtigung wenn systemd-Service nicht startet
Sobald das Starten eines Dienstes über systemd fehlschläg soll eine Benachrichtigung per E-Mail erfolgen. Das ist sowohl bei Timern sinnvoll, als auch bei Diensten die für Backupzwecke automatisiert gestoppt und später wieder gestartet werden. Dazu muss im Service im Bereich Unit der Parameter "OnFailure" gesetzt werden.
[Unit]
...
OnFailure=status-mail@%n.service
...
Im Fehlerfall wird der Service "status-mail@%n.service" gestartet, dabei gibt %n hinter '@' den Namen des fehlgeschlagenen Service wieder. Es wird also eine Instanz mit dem Namen des fehlgeschlagenen Service gestartet.
sudo nano /etc/systemd/system/status-mail@.service #without %n!
Der Service "status-mail@.service" wird unter /etc/systemd/system mit dem nachfolgenden Inhalt angelegt.
[Unit]
Description=Status Mailer Service
After=network.target
[Service]
Type=simple
ExecStart=/bin/status-mail.sh %I "Hostname: %H" "Machine ID: %m" "Boot ID: %b"
Der Service ruft wiederum einmalig das Skript "/bin/status-mail.sh" auf, welches die E-Mail an root sendet. Das Skript muss daher ausführbar sein!
sudo nano /bin/status-mail.sh
Das Skript "status-mail.sh" erstellt wie folgt eine E-Mail mit sendmail:
#!/bin/bash
MAILTO="root"
MAILFROM="status-mailer"
UNIT=$1
EXTRA=""
for e in "${@:2}"; do
EXTRA+="$e"$'\n'
done
UNITSTATUS=$(systemctl status $UNIT)
sendmail $MAILTO <<EOF
From:$MAILFROM
To:$MAILTO
Subject:Status mail for unit: $UNIT
Status report for unit: $UNIT
$EXTRA
$UNITSTATUS
EOF
echo -e "Status mail sent to: $MAILTO for unit: $UNIT"
Zu guter letzt das Skript noch ausführbar machen:
sudo chmod +x /bin/status-mail.sh