#!/usr/bin/env python3 """保活检测:检查 DB 中的价格是否新鲜,price_monitor 是否在运行""" import sqlite3, subprocess, sys, os from datetime import datetime DB = '/home/hmo/web-dashboard/data/mofin.db' def check(): issues = [] # 1. 检查 price_monitor 进程 try: r = subprocess.run(['pgrep', '-f', 'price_monitor'], capture_output=True, text=True) if r.stdout.strip(): print(f" price_monitor: RUNNING (PID {r.stdout.strip()})") else: issues.append("price_monitor 未运行") print(f" price_monitor: NOT RUNNING") except: pass # 2. 检查 DB 价格新鲜度 try: db = sqlite3.connect(DB) db.row_factory = sqlite3.Row row = db.execute("SELECT updated_at FROM portfolio_summary WHERE id=1").fetchone() if row and row['updated_at']: try: dt = datetime.strptime(row['updated_at'], '%Y-%m-%d %H:%M') age = (datetime.now() - dt).total_seconds() / 60 if age > 10: issues.append(f"DB 价格 {age:.0f} 分钟未更新") print(f" DB updated: {row['updated_at']} ({age:.0f} min ago)") except: pass else: issues.append("DB 无价格数据") db.close() except Exception as e: issues.append(f"DB 读取失败: {e}") # 3. 输出 if issues: print(f"\n ISSUES: {', '.join(issues)}") return 1 print(" OK") return 0 if __name__ == '__main__': sys.exit(check())