#!/bin/bash # Reap stale headless browsers (no CDP activity for >4h) # Run via cron: */30 * * * * ~/Projects/NetVM/bin/netvm-reaper.sh for pid in $(pgrep -f "chromium.*--headless" 2>/dev/null); do # Check if CDP port is still responding (find port from cmdline) port=$(tr '\0' ' ' < /proc/$pid/cmdline 2>/dev/null | grep -oP 'remote-debugging-port=\K\d+' | head -1) if [ -n "$port" ]; then # Try to hit CDP (via netns if needed) if ! timeout 5 bash -c "cat < /dev/null > /dev/tcp/127.0.0.1/$port" 2>/dev/null; then echo "reaping dead browser pid $pid (port $port not responding)" kill -TERM $pid 2>/dev/null fi fi # Check age (kill if >12h old) age=$(($(date +%s) - $(stat -c %Y /proc/$pid 2>/dev/null || echo 0))) if [ "$age" -gt 43200 ]; then echo "reaping old browser pid $pid (age ${age}s)" kill -TERM $pid 2>/dev/null fi done # Clean up old log files find /tmp -name "*-smoke.log" -mtime +7 -delete 2>/dev/null find /tmp -name "otp_*.py" -mtime +1 -delete 2>/dev/null find /tmp -name "check_*.py" -mtime +1 -delete 2>/dev/null # Prune unattached stale agent tmux sessions older than 2 hours (7200s) python3 "$(cd "$(dirname "$0")" && pwd)/muse-tmux.py" prune --ttl 7200 2>/dev/null || true