From 19207509675ede8a55f111ceef5ab9ba936c13f9 Mon Sep 17 00:00:00 2001 From: operator Date: Sat, 3 Oct 2026 15:46:35 +0000 Subject: [PATCH] netvm-reaper.sh: reap stale headless browsers --- bin/netvm-reaper.sh | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100755 bin/netvm-reaper.sh diff --git a/bin/netvm-reaper.sh b/bin/netvm-reaper.sh new file mode 100755 index 0000000..e6db038 --- /dev/null +++ b/bin/netvm-reaper.sh @@ -0,0 +1,24 @@ +#!/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