65 lines
1.5 KiB
Bash
Executable File
65 lines
1.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# OpenClaw Connection Repair Watcher
|
|
|
|
LOG_FILE="$HOME/.openclaw/logs/repair.log"
|
|
HEALTH_URL="http://127.0.0.1:18789/health"
|
|
REMOTE_HOST="100.64.0.39"
|
|
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
|
|
|
|
log() {
|
|
echo "[$TIMESTAMP] $1" >> "$LOG_FILE"
|
|
}
|
|
|
|
check_health() {
|
|
# Attempt to fetch health status with a short timeout
|
|
HEALTH_STATUS=$(curl -s -m 5 "$HEALTH_URL")
|
|
if [[ "$HEALTH_STATUS" == *'"ok":true'* ]]; then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
check_remote() {
|
|
# Check if remote host is reachable via Tailscale
|
|
if ping -c 1 -W 2 "$REMOTE_HOST" > /dev/null 2>&1; then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
repair() {
|
|
log "Connection loss detected. Attempting repair..."
|
|
|
|
# Restart SSH tunnel first
|
|
log "Restarting ai.openclaw.ssh-tunnel..."
|
|
launchctl stop ai.openclaw.ssh-tunnel 2>/dev/null
|
|
launchctl start ai.openclaw.ssh-tunnel
|
|
|
|
# Wait a bit for the tunnel to establish
|
|
sleep 5
|
|
|
|
# Restart OpenClaw node
|
|
log "Restarting ai.openclaw.node..."
|
|
launchctl stop ai.openclaw.node 2>/dev/null
|
|
launchctl start ai.openclaw.node
|
|
|
|
log "Repair attempt completed."
|
|
}
|
|
|
|
# Main Watcher Logic
|
|
log "Starting health check..."
|
|
if ! check_health; then
|
|
log "Health check failed for $HEALTH_URL"
|
|
if ! check_remote; then
|
|
log "Remote host $REMOTE_HOST is unreachable. Is Tailscale connected?"
|
|
else
|
|
repair
|
|
fi
|
|
else
|
|
# Connection is healthy, log and exit
|
|
log "Health check passed. Connection is healthy."
|
|
exit 0
|
|
fi
|