# -*- coding: utf-8 -*- r'''暂停监测单元,等 443 端口开好再启用。 == 为什么要暂停 == 新架构:用户 -> Cloudflare -> nginx(443) -> 127.0.0.1:13245 证书签好了、nginx 也配了 443,但 **Lightsail 防火墙还没放行 443**, 所以外部访问 https://yk.xxmxxs.top 是 522。 监测查的是"用户实际走的路",于是一直判失败、fails 一直涨。 涨到 3 就启动紧急预案 —— 而预案能做的都解决不了"防火墙没开", 结果只会白折腾服务 + 每 10 分钟塞一份没用的报告进后台, 把以后真正出事的现场淹掉。 所以:**系统还没部署完,先别开监测**。443 通了再启用。 == 暂停不是关掉 == 只 stop,配置和脚本都留着,一条命令就能恢复: sudo systemctl start ykxmz-monitor.timer == 写这个文件的原因 == 之前用 `python -c @"..."@` 写过一次,里面 `\$(...)` 转义错了, bash 报 "syntax error near unexpected token `('"。 教训一致:**远端命令超过一行就写文件**,别在 -c 里跟转义缠斗。 ''' from __future__ import annotations import sys from pathlib import Path ROOT = Path(__file__).resolve().parent.parent sys.path.insert(0, str(ROOT / "_build")) from lssh import run # noqa: E402 RELAY_DIR = "/opt/ykxmz-relay" def main() -> int: print("=" * 62) print(" 暂停监测单元(等 443 开好再启用)") print("=" * 62) print() print(" ── 1. 停掉监测定时器 ──") # 分几条简单命令跑,不做复杂嵌套 —— 免得又踩转义 run("sudo systemctl stop ykxmz-monitor.timer", timeout=120, quiet=True) out = run("systemctl is-active ykxmz-monitor.timer", timeout=60, quiet=True) print(" monitor.timer = " + out[1].strip()) print() print(" ── 2. 失败计数清零 ──") run("printf 'fails=0\\nlast_rescue=0\\nlast_code=000\\n" "local_code=200\\nlayer=edge\\n' > %s/monitor_state.txt" % RELAY_DIR, timeout=60, quiet=True) out = run("cat %s/monitor_state.txt" % RELAY_DIR, timeout=60, quiet=True) for ln in out[1].strip().splitlines(): print(" " + ln) print() print(" ── 3. 清掉演练产生的报告 ──") before = run("ls -1 %s/rescue_reports 2>/dev/null | wc -l" % RELAY_DIR, timeout=60, quiet=True) print(" 清之前: %s 份" % before[1].strip()) run("rm -f %s/rescue_reports/*.txt" % RELAY_DIR, timeout=60, quiet=True) after = run("ls -1 %s/rescue_reports 2>/dev/null | wc -l" % RELAY_DIR, timeout=60, quiet=True) print(" 清之后: %s 份" % after[1].strip()) print() print(" ── 4. 当前状态 ──") st = run("systemctl is-active ykxmz-relay nginx ykxmz-monitor.timer " "certbot.timer", timeout=60, quiet=True) names = ["ykxmz-relay", "nginx", "ykxmz-monitor.timer", "certbot.timer"] for i, ln in enumerate(st[1].strip().splitlines()): if i < len(names): print(" %-24s %s" % (names[i], ln)) print() code1 = run("curl -s -o /dev/null -w '%{http_code}' " "http://127.0.0.1:13245/v1/health", timeout=60, quiet=True) print(" %-24s %s" % ("中转本机", code1[1].strip())) code2 = run("curl -sk -o /dev/null -w '%{http_code}' --resolve " "yk.xxmxxs.top:443:127.0.0.1 " "https://yk.xxmxxs.top/v1/health", timeout=60, quiet=True) print(" %-24s %s" % ("nginx 443 本机", code2[1].strip())) print() print(" 443 开好之后恢复监测:") print(" sudo systemctl start ykxmz-monitor.timer") print(" (或者告诉我,我来开 + 全链路验证)") return 0 if __name__ == "__main__": sys.exit(main())