Add script 'check_prosody_auth.sh'.
This commit is contained in:
38
check_prosody_auth.sh
Executable file
38
check_prosody_auth.sh
Executable file
@@ -0,0 +1,38 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# --------------------
|
||||
# This script checks whether the 'prosody' service has logged any Dovecot authentication errors within
|
||||
# the last check interval (MONITORING_INTERVAL)
|
||||
#
|
||||
# It is a good idea to run this script as a cron job every check interval minutes (MONITORING_INTERVAL).
|
||||
# --------------------
|
||||
|
||||
LOGFILE="/var/log/prosody_auth_check.log"
|
||||
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
|
||||
DOVECOT_HOST="a.mx.oopen.de"
|
||||
DOVECOT_PORT="44444"
|
||||
MONITORING_INTERVAL=6
|
||||
|
||||
# Test 1: Ist Dovecot überhaupt erreichbar?
|
||||
if ! timeout 8 bash -c "echo >/dev/tcp/$DOVECOT_HOST/$DOVECOT_PORT" 2>/dev/null; then
|
||||
echo "$TIMESTAMP WARN: Dovecot nicht erreichbar - Prosody-Restart wäre sinnlos, überspringe" >> $LOGFILE
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Test 2: Genau der bekannte Fehler in den letzten 6 Minuten?
|
||||
ERROR_COUNT=$(journalctl -u prosody --since "${MONITORING_INTERVAL} minutes ago" --no-pager 2>/dev/null | \
|
||||
grep -c "sasl_dovecot: Could not read from socket" || true)
|
||||
|
||||
if [ "$ERROR_COUNT" -gt 0 ]; then
|
||||
echo "$TIMESTAMP ERROR: sasl_dovecot socket-Fehler erkannt ($ERROR_COUNT×) – starte Prosody neu" >> $LOGFILE
|
||||
systemctl restart prosody
|
||||
sleep 5
|
||||
if systemctl is-active --quiet prosody; then
|
||||
echo "$TIMESTAMP OK: Prosody erfolgreich neugestartet" >> $LOGFILE
|
||||
else
|
||||
echo "$TIMESTAMP CRITICAL: Prosody-Neustart fehlgeschlagen!" >> $LOGFILE
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "$TIMESTAMP OK: Keine Auth-Fehler" >> $LOGFILE
|
||||
Reference in New Issue
Block a user