protonmail-bridge-docker/deb/healthcheck.sh

38 lines
1 KiB
Bash

#!/bin/bash
set -euo pipefail
# Proton Bridge healthcheck — probes all 4 ports in parallel.
# Exit 0 = healthy, 1 = unhealthy (Docker HEALTHCHECK contract).
TIMEOUT=5 # seconds per probe
check_smtp() {
local port=$1
echo 'QUIT' | socat -T${TIMEOUT} - TCP4:localhost:${port} 2>/dev/null \
| grep -q '^220'
}
check_imap() {
local port=$1
printf 'A1 LOGOUT\r\n' | socat -T${TIMEOUT} - TCP4:localhost:${port} 2>/dev/null \
| grep -q '^\* OK'
}
# Fire all probes in parallel, capture PIDs
check_smtp 25 & PID_SMTP_25=$!
check_imap 143 & PID_IMAP_143=$!
check_smtp 1025 & PID_SMTP_1025=$!
check_imap 1143 & PID_IMAP_1143=$!
# Collect results — || prevents set -e from exiting early on probe failure
FAIL=0
wait $PID_SMTP_25 || { echo "FAIL smtp:25"; FAIL=1; }
wait $PID_IMAP_143 || { echo "FAIL imap:143"; FAIL=1; }
wait $PID_SMTP_1025 || { echo "FAIL smtp:1025"; FAIL=1; }
wait $PID_IMAP_1143 || { echo "FAIL imap:1143"; FAIL=1; }
if [[ $FAIL -eq 0 ]]; then
echo "OK smtp:25 imap:143 smtp:1025 imap:1143"
fi
exit $FAIL