liveness: probe with a pre-registration PING/PONG instead of a full NICK/USER register — proves acceptor+core liveness without creating a client session, so it no longer spams the snotice stream with livecheck connect/quit notices

This commit is contained in:
Jean Chevronnet 2026-08-14 14:07:59 +00:00
parent d795d1a59c
commit 40d868f4cf

View file

@ -1,8 +1,11 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# echoIRCd liveness probe: do a real NICK/USER register round-trip on the plaintext # echoIRCd liveness probe: prove the acceptor + core are alive and responsive with a
# port and, if the daemon doesn't answer with a 001 welcome, restart it. Catches a # pre-registration PING/PONG round-trip, and restart the daemon if it doesn't answer.
# hung core (process alive but not serving), which Restart=on-failure alone can't. # Catches a hung core (process alive but not serving), which Restart=on-failure can't.
# Run by echoircd-liveness.timer. #
# It deliberately does NOT register (no NICK/USER), so it never triggers connect/quit
# server-notices — the probe is invisible in the oper snotice stream. Run by
# echoircd-liveness.timer.
set -u set -u
PORT="${1:-6767}" PORT="${1:-6767}"
@ -12,7 +15,8 @@ port = int(sys.argv[1])
try: try:
s = socket.create_connection(("127.0.0.1", port), timeout=5) s = socket.create_connection(("127.0.0.1", port), timeout=5)
s.settimeout(5) s.settimeout(5)
s.sendall(b"NICK livecheck\r\nUSER lc 0 * :liveness\r\n") # a pre-registration PING is answered with a PONG, without creating a client session
s.sendall(b"PING :liveness\r\n")
data = b"" data = b""
end = time.time() + 6 end = time.time() + 6
while time.time() < end: while time.time() < end:
@ -20,14 +24,10 @@ try:
if not d: if not d:
break break
data += d data += d
if b" 001 " in data: if b"PONG" in data:
break break
try:
s.sendall(b"QUIT :liveness\r\n")
except OSError:
pass
s.close() s.close()
sys.exit(0 if b" 001 " in data else 1) sys.exit(0 if b"PONG" in data else 1)
except OSError: except OSError:
sys.exit(1) sys.exit(1)
PY PY
@ -35,5 +35,5 @@ then
exit 0 exit 0
fi fi
echo "echoircd liveness: no 001 from 127.0.0.1:${PORT} within timeout — restarting echoircd-dev.service" echo "echoircd liveness: no PONG from 127.0.0.1:${PORT} within timeout — restarting echoircd-dev.service"
systemctl restart echoircd-dev.service systemctl restart echoircd-dev.service