#!/usr/bin/env bash # Отложенный рестарт main-симбиот-харнеса (typing-активация, e-261002202857). # Рестарт убивает работающих LLM-воркеров (KillMode=cgroup), поэтому: # ждём окно -- 15 подряд секунд без живых/зомби-воркеров _llm_worker # и без свежих (< 15с) result-файлов тиков /tmp/simbiot_tick_*.json # (свежий файл = только что завершившийся тик, у него хвост-постоб�отка). # Окна нет за дедлайн — выходим БЕЗ рестарта (тик жив, повтор через час). set -u DEADLINE=$(( $(date +%s) + 150 )) is_quiet() { NOW=$(date +%s) for p in $(pgrep -f 'harness/_llm_worker.py' 2>/dev/null); do [ -r "/proc/$p/stat" ] || continue st=$(awk '{print $3}' "/proc/$p/stat" 2>/dev/null) [ "$st" = "Z" ] && return 1 # живой или зомби-воркер = тик активен done for f in /tmp/simbiot_tick_*.json; do [ -f "$f" ] || continue mt=$(stat -c %Y "$f" 2>/dev/null || echo 0) [ $((NOW - mt)) -lt 15 ] && return 1 # хвост-постоботка только что завершившегося тика done return 0 } CLEAN=0 while [ "$(date +%s)" -lt "$DEADLINE" ]; do if is_quiet; then CLEAN=$((CLEAN + 1)) if [ "$CLEAN" -ge 5 ]; then echo "окно найдено ($(date '+%H:%M:%S')) — рестарт simbiot-harness" systemctl restart simbiot-harness.service exit 0 fi sleep 3 else CLEAN=0 sleep 10 fi done echo "окно не найдено за дедлайн — рестарт прерван (тик работает, повтор через час)" exit 0