From 0f3b555cbdeb52a83315aae45591045a6133ae6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9F=A5=E5=BE=AE?= Date: Wed, 8 Jul 2026 23:27:26 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20preflight=E6=96=B0=E5=A2=9EDB=E6=AD=BB?= =?UTF-8?q?=E9=94=81=E6=A3=80=E6=B5=8B+=E4=BF=AE=E5=A4=8D=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E9=81=97=E6=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/preflight_verify.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/scripts/preflight_verify.py b/scripts/preflight_verify.py index 0fdbe001..9d47a324 100644 --- a/scripts/preflight_verify.py +++ b/scripts/preflight_verify.py @@ -143,6 +143,21 @@ def check_cron_timestamps(): pass check("cron过期检查", stale_count == 0, f"{stale_count}个cron长时间未正常运行" if stale_count else "") +# ── 6. DB死锁检测 ── +def check_db_locks(): + """检查最近24小时是否有 database is locked 错误""" + try: + import subprocess + r = subprocess.run( + ["sudo", "journalctl", "-u", "xmpp-zhiwei", "--since", "24 hours ago", "--no-pager"], + capture_output=True, text=True, timeout=30 + ) + locked_lines = [l for l in r.stdout.split("\n") if "database is locked" in l.lower()] + check("DB死锁: 24h内lock错误", len(locked_lines) == 0, + f"发现{len(locked_lines)}次: {locked_lines[0][:120]}" if locked_lines else "") + except Exception as e: + check("DB死锁检查", False, str(e)) + if __name__ == "__main__": print("🔍 MoFin 开盘前验证", datetime.now().strftime("%m-%d %H:%M")) print("=" * 40) @@ -150,6 +165,8 @@ if __name__ == "__main__": check_imports() check_db() check_smoke() + check_cron_timestamps() + check_db_locks() # 汇总 print()