#!/bin/bash
# 守护 tailscaled / gz_server / funnel，任一挂了自动拉起（60s 巡检）
SOCK=/var/run/tailscale/tailscaled.sock
WS=/data/workspace/南部大区城市看板
while true; do
  if ! pgrep -x tailscaled >/dev/null; then
    echo "$(date '+%m-%d %H:%M:%S') restart tailscaled" >> /tmp/ts_watchdog.log
    mkdir -p /var/lib/tailscale /var/run/tailscale
    nohup tailscaled --tun=userspace-networking --state=/var/lib/tailscale/tailscaled.state --socket=$SOCK >> /tmp/tailscaled.log 2>&1 &
    sleep 6
  fi
  if ! pgrep -f 'gz_serve[r]\.py' >/dev/null; then
    echo "$(date '+%m-%d %H:%M:%S') restart gz_server" >> /tmp/ts_watchdog.log
    nohup python3 $WS/gz_server.py >> /tmp/gz_server.log 2>&1 &
    sleep 2
  fi
  if ! timeout 10 tailscale funnel status 2>/dev/null | grep -q 'proxy http://127.0.0.1:8899'; then
    echo "$(date '+%m-%d %H:%M:%S') re-funnel" >> /tmp/ts_watchdog.log
    timeout 20 tailscale funnel --bg 8899 >> /tmp/tailscaled.log 2>&1
  fi
  sleep 60
done
