diff --git a/scripts/farm/estado-granja.sh b/scripts/farm/estado-granja.sh index 84f16509..2ec57b06 100755 --- a/scripts/farm/estado-granja.sh +++ b/scripts/farm/estado-granja.sh @@ -48,12 +48,29 @@ else echo " (sin grafo — corré scripts/build-state.py --kde)" fi -echo; echo "══ CRON DE COSECHA ══" -line=$(crontab -l 2>/dev/null | grep cosecha-cron | grep -v '^#') -[ -n "$line" ] && echo " instalado: $line" || echo " ⚠ NO instalado en el crontab" +echo; echo "══ LATIDO DE COSECHA ══" +# Se comprueba el EFECTO, no el mecanismo. Antes esto miraba `crontab -l` y decía «⚠ NO instalado» +# — cierto y RUIDOSO a la vez: desde el 2026-09-18 el latido lo sostiene el cron de root del +# ANFITRIÓN, y un agente enjaulado no ve ese crontab ni lo verá nunca. Un aviso que salta siempre es +# un aviso que nadie lee. Lo que sí prueba que el latido vive son sus commits, que están acá. +ult=$(git log -1 --format=%ct --grep="cosecha granja" 2>/dev/null) +if [ -n "$ult" ]; then + edad=$(( $(date +%s) - ult )) + printf ' último ciclo: hace %dm %ds — %s\n' $((edad/60)) $((edad%60)) \ + "$(git log -1 --format=%s --grep='cosecha granja' 2>/dev/null)" + # dispara en :00 y :30 ⇒ más de 40 min sin commit es un latido perdido, no una pausa + if [ "$edad" -gt 2400 ]; then + echo " ⚠ hace más de 40m que no commitea — el latido dispara en :00 y :30" + else + echo " ✓ al día" + fi +else + echo " ⚠ no hay ningún commit de cosecha en el historial" +fi +if crontab -l 2>/dev/null | grep -q '[c]osecha-cron'; then + echo " (y además está en el crontab de este usuario)" +fi if [ -f work/cosecha-cron.log ]; then echo " último ciclo (tail):" grep -E 'cosecha-cron (arranca|fin)|siembra|cosecha ✓|estado commit' work/cosecha-cron.log | tail -6 | sed 's/^/ /' -else - echo " (aún no corrió — no hay work/cosecha-cron.log; el cron dispara en :00 y :30)" fi