dispatch-turn.sh (headless turn launcher with TURN_MODEL routing), queue-after.sh (serial gate chain + quota-wall guard), pmo-heartbeat.sh (PMO wake loop), quota-probe-then-chain.sh (post-wall relaunch).
42 lines
1.4 KiB
Bash
Executable File
42 lines
1.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# pmo-loop.sh [pmo|work] — keep a crush session alive inside its screen.
|
|
ROLE="${1:-pmo}"
|
|
case "$ROLE" in
|
|
pmo) FRESH="$HOME/.coordinate/RELAUNCH-FRESH"; PIN="$HOME/.coordinate/PMO-SESSION-ID" ;;
|
|
work) FRESH="$HOME/.coordinate/RELAUNCH-FRESH-WORK"; PIN="$HOME/.coordinate/WORK-SESSION-ID" ;;
|
|
*) echo "usage: $0 [pmo|work]" >&2; exit 1 ;;
|
|
esac
|
|
LOG="$HOME/.coordinate/logs/${ROLE}-relaunch.log"
|
|
LEDGER=/home/_crossfeed/metrics/launches.jsonl
|
|
ledger() { printf '%s\n' "$1" >> "$LEDGER" 2>/dev/null || true; }
|
|
cd "$HOME"
|
|
export TERM="${TERM:-xterm-256color}"
|
|
export PATH="$HOME/.local/bin:/usr/local/bin:/usr/bin:/bin:$PATH"
|
|
while true; do
|
|
started=$(date +%s)
|
|
mode=continue
|
|
if [ -f "$FRESH" ]; then
|
|
rm -f "$FRESH"
|
|
mode=fresh
|
|
echo "$(date -Is) relaunch FRESH" >> "$LOG"
|
|
crush --yolo
|
|
elif [ -s "$PIN" ]; then
|
|
sid=$(cat "$PIN")
|
|
mode=pinned:$sid
|
|
echo "$(date -Is) relaunch PINNED $sid" >> "$LOG"
|
|
crush --yolo --session "$sid"
|
|
else
|
|
echo "$(date -Is) relaunch CONTINUE" >> "$LOG"
|
|
crush --yolo --continue
|
|
fi
|
|
rc=$?
|
|
rt=$(( $(date +%s) - started ))
|
|
ledger "{\"ts\":\"$(date -Is)\",\"user\":\"$USER\",\"role\":\"$ROLE\",\"mode\":\"$mode\",\"rc\":$rc,\"runtime_s\":$rt}"
|
|
if [ "$rt" -lt 60 ]; then
|
|
echo "$(date -Is) short run (${rt}s rc=$rc) - backoff 60s" >> "$LOG"
|
|
sleep 60
|
|
else
|
|
sleep 2
|
|
fi
|
|
done
|