#!/bin/bash # 修正 service.xpcool.com 监控的判定规则 # 背景:该后端为纯 POST 接口,任何 GET 都返回 404;404 说明 nginx+GoFrame 存活, # 真正故障(后端进程挂掉)时 nginx 会返回 502,故把 404 纳入可接受状态码。 set -e echo "===== update monitor #2 =====" sudo python3 - <<'PY' import sqlite3 con = sqlite3.connect("/data/uptime-kuma/kuma.db", timeout=30) cur = con.cursor() cur.execute( "update monitor set accepted_statuscodes_json = ?, description = ? where id = 2", ('["200-399","404"]', "Go 后端服务(无根路由,404 即存活;502/超时才算故障)"), ) con.commit() row = cur.execute("select id, name, accepted_statuscodes_json from monitor where id = 2").fetchone() print("updated:", row[0], row[2]) con.close() PY echo "===== restart to reload =====" sudo docker restart uptime-kuma >/dev/null sleep 55 echo "===== final status =====" sudo python3 - <<'PY' import sqlite3 con = sqlite3.connect("file:/data/uptime-kuma/kuma.db?mode=ro", uri=True) label = {0: "DOWN", 1: "UP", 2: "PENDING", 3: "MAINTENANCE"} q = """ select m.id, m.name, m.interval, m.accepted_statuscodes_json, h.status, h.msg from monitor m left join heartbeat h on h.id = (select max(id) from heartbeat where monitor_id = m.id) order by m.weight, m.id """ for mid, name, interval, codes, status, msg in con.execute(q): print(" id=%s %-4ss [%-11s] %-34s %s" % (mid, interval, label.get(status, status), name[:34], (msg or "")[:40])) print() print("heartbeat total:", con.execute("select count(*) from heartbeat").fetchone()[0]) PY sudo docker ps --filter name=uptime-kuma --format '{{.Names}} {{.Status}}' echo DONE