#!/bin/bash # 简历筛选系统连通性检查 # 用法: bash check-connectivity.sh # 检查:SSH连接(Tailscale)、WiFi信号、两条CDP隧道、Watchdog、batch-runner set -euo pipefail SSH_HOST="100.64.0.7" SSH_PORT="22" SSH_USER="sshadmin" SSH_CMD="ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -p $SSH_PORT $SSH_USER@$SSH_HOST" PASS=0 FAIL=0 WARN=0 ok() { echo " ✅ $1"; ((PASS++)); } fail() { echo " ❌ $1"; ((FAIL++)); } warn() { echo " ⚠️ $1"; ((WARN++)); } echo "═══ 简历筛选系统连通性检查 ═══" echo "" # 1. SSH 连接 echo "【1】SSH → Windows ($SSH_HOST:$SSH_PORT)" if $SSH_CMD "echo OK" >/dev/null 2>&1; then ok "SSH 连接正常" else fail "SSH 连接失败(Tailscale不通或远端关机)" echo " → 后续检查跳过" exit 1 fi # 2. WiFi 信号 echo "" echo "【2】WiFi 信号" WIFI_INFO=$($SSH_CMD "netsh wlan show interfaces" 2>/dev/null | grep -E "SSID|Signal|State" || true) if echo "$WIFI_INFO" | grep -qi "connected"; then SIGNAL=$(echo "$WIFI_INFO" | grep -i "signal" | sed 's/.*:\s*//' | tr -d ' %') SSID=$(echo "$WIFI_INFO" | grep -i "SSID" | tail -1 | sed 's/.*:\s*//') echo " SSID: $SSID | 信号: ${SIGNAL:-?}%" if [ "${SIGNAL:-0}" -lt 30 ]; then warn "WiFi 信号极弱(${SIGNAL}%),可能频繁断连" else ok "WiFi 已连接" fi else fail "WiFi 未连接" fi # 3. CDP 隧道 echo "" echo "【3】CDP 隧道" # hr1 Chrome (9223) echo " hr1 Chrome — 隧道端口 9223" if curl -s --connect-timeout 5 http://127.0.0.1:9223/json/version >/dev/null 2>&1; then BROWSER=$(curl -s --connect-timeout 5 http://127.0.0.1:9223/json/version | python3 -c "import sys,json;print(json.load(sys.stdin).get('Browser','?'))" 2>/dev/null || echo "?") TABS=$(curl -s http://127.0.0.1:9223/json/list 2>/dev/null | python3 -c " import sys,json tabs=json.load(sys.stdin) pages=[t for t in tabs if t.get('type')=='page'] for t in pages: print(f' {t[\"title\"]} → {t[\"url\"][:80]}') print(f' 共 {len(pages)} 个页面') " 2>/dev/null || echo " (无法读取)") ok "CDP 正常 ($BROWSER)" echo "$TABS" else fail "CDP 不通(隧道断开或Chrome未运行)" fi # hr2 Edge (9224) echo " hr2 Edge — 隧道端口 9224" if curl -s --connect-timeout 5 http://127.0.0.1:9224/json/version >/dev/null 2>&1; then BROWSER=$(curl -s --connect-timeout 5 http://127.0.0.1:9224/json/version | python3 -c "import sys,json;print(json.load(sys.stdin).get('Browser','?'))" 2>/dev/null || echo "?") TABS=$(curl -s http://127.0.0.1:9224/json/list 2>/dev/null | python3 -c " import sys,json tabs=json.load(sys.stdin) pages=[t for t in tabs if t.get('type')=='page'] for t in pages: print(f' {t[\"title\"]} → {t[\"url\"][:80]}') print(f' 共 {len(pages)} 个页面') " 2>/dev/null || echo " (无法读取)") ok "CDP 正常 ($BROWSER)" echo "$TABS" else fail "CDP 不通(隧道断开或Edge未运行)" fi # 4. Watchdog 状态 echo "" echo "【4】隧道守护 Watchdog" if ps aux | grep ssh-tunnel-watchdog | grep -v grep >/dev/null 2>&1; then WPID=$(ps aux | grep ssh-tunnel-watchdog | grep -v grep | awk '{print $2}') ok "运行中 (PID $WPID)" if [ -f /tmp/ssh-tunnel-watchdog.pid ]; then echo " PID文件: $(cat /tmp/ssh-tunnel-watchdog.pid)" else warn "无 PID 锁文件(可能是旧版 v1,需重启才能用 v2)" fi else warn "未运行" fi # 5. batch-runner 实例 echo "" echo "【5】batch-runner 实例" RUNNING=$(ps aux | grep "batch-runner" | grep -v grep || true) if [ -n "$RUNNING" ]; then echo "$RUNNING" | while read -r line; do ok "运行中: $(echo "$line" | grep -oP 'ACCOUNT=\S+' || echo '账号未标注')" done else echo " (无 batch-runner 运行)" fi # 汇总 echo "" echo "═══ 检查完成 ═══" echo "✅ 通过: $PASS ❌ 失败: $FAIL ⚠️ 警告: $WARN" if [ "$FAIL" -gt 0 ]; then echo "有失败项,修复后再启动筛选。" else echo "连通性正常,可以启动筛选。" fi