Ich hab das als Herausforderung genommen, um wieder mal etwas dazuzulernen.
Erweitere die Unit von vorhin auf das:
Code: Alles auswählen
[Unit]
Description=homebridge-%i.service
After=syslog.target network-online.target
OnFailure=OnFailure=notification-telegram-failed@%n.service
[Service]
Type=simple
User=root
EnvironmentFile=/etc/default/homebridge-%i
ExecStart=/usr/bin/homebridge $HOMEBRIDGE_OPTS
Restart=on-failure
RestartSec=10
KillMode=process
[Install]
WantedBy=multi-user.target
/etc/systemd/system/notification-telegram-failed@%n.service
Code: Alles auswählen
[Unit]
Description=Send failure-notification about %i to telegram
[Service]
User=DEINLOGINUSER
Environment=TSF=/tmp/%i.failed
Environment=FLOODC=60
ExecStartPre=/bin/bash -c "[ -e $TSF ] || echo $(($(date +%%s)-$FLOODC)) > $TSF"
ExecStart=/bin/bash -c "if [ $(($(cat $TSF)+$FLOODC)) -lt $(date +"%%s") ]; then echo $(date +"%%s") > $TSF; /usr/local/bin/ntfy -b telegram send \"FAILED\n$(systemctl status %i)\"; else exit 0; fi"
Schlägt der Service fehl, wird er nach 10 Sekunden restartet und es wird die Notification-Unit für telegram gestartet.
Die Notification-Unit hat eine Begrenzung eingebaut, dass innerhalb einer FLOODC-Periode (60s) nur einmal eine Notification geschickt wird.
Es wird dazu je überwachter Unit ein File in /tmp mit dem Timestamp der letzten Nachricht abgelegt.
Die Notification enthält als erstes Wort "FAILED" und dann die Ausgabe von systemctl status überwachter.service
UND die Notification wird von deinem User ausgeführt. Die könntest du sogar von einem vollkommen unprivilegierten User ohne weitere Rechte auch ausführen lassen, was die Sicherheit deutlich erhöht.
Ich hab jetzt genau 2 Service-Units, mit der ich 1, 20 oder 500 homebridge-Services starten, überwachen (=Notification senden, wenn der Service ausfällt) und automatisch restarten lassen kann.
Du hast 17 Unit-Files (die du einzeln anpassen musst, wenn du eine kleine Änderung auf alle anwenden möchtest), 17 Konfigurationsfiles, ein Shell-Skript, welches permanent das journal parst (was performance kostet) und das als root eine Notification an telegram schickt.
Überleg noch einmal, ob deine Lösung wirklich so gut ist.
lg scientific