125 lines
4.0 KiB
Bash
Executable File
125 lines
4.0 KiB
Bash
Executable File
#!/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
|