#!/bin/bash # Sorveglianza ORARIA del cuscino USDC di regolamento (debito ยง5.17, issue #3) โ€” v2.0.0+. # Minuto :53 = DOPO il giro del book (:47, i cui fill si regolano in USDC) e fuori dal minuto # tondo (rate-limit per-IP), dal :25 (catena), dal :35 (usde) e dal :42 (balance). # PUO' INVIARE ORDINI: sotto zero di slack lancia usde_convert --esegui (vende USDE), con le # guardie dichiarate nel docstring di scripts/live/cuscino_watch.py; lo interruttore e' lo # stesso del libro (execution_enabled in config/live.json). # LOCK SUL CONTO (#36): cuscino_watch e book_execute (cron_book.sh, :47) sono separati solo dal # tempo e possono mandare ordini sullo stesso conto โ€” giri fino a 659s sono stati misurati. # `flock -n` (mai `-w`: un'attesa farebbe scivolare il giro orario) su logs/.conto.lock: se # book_execute lo tiene, questo giro si SALTA (rc 75) invece di sovrapporsi. export PATH="/home/adriano/.local/bin:$PATH" cd /opt/docker/PythagorasGoal || exit 1 mkdir -p logs { echo "===== $(date -u '+%Y-%m-%dT%H:%M:%SZ') cron_cuscino =====" flock -n -E 75 logs/.conto.lock uv run python scripts/live/cuscino_watch.py --quiet; rc=$? [ $rc -eq 75 ] && echo " cuscino: SALTATO โ€” conto occupato (logs/.conto.lock)" # (#30) giro orario dei sorveglianti a max_age<=6h: notifica solo il NUOVO, marcatore in # data/live/monitor_health_detto.json. Fuori dal lock: e' sola lettura, non tocca il conto. uv run python scripts/live/monitor_health.py --quiet --solo-orari || true echo "===== done $(date -u '+%H:%M:%SZ') =====" } >> logs/cron_cuscino.log 2>&1