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:
parent
d795d1a59c
commit
40d868f4cf
1 changed files with 12 additions and 12 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue