estado-granja: comprobar el LATIDO por sus commits, no el crontab por su presencia

El bloque decía «⚠ NO instalado en el crontab» y era cierto y ruidoso a la vez: desde que el latido
lo sostiene el cron de root del ANFITRIÓN, un agente enjaulado no ve ese crontab ni lo verá nunca,
así que el aviso saltaba en TODAS las corridas desde la jaula. Un aviso que salta siempre es un
aviso que nadie lee, y tapaba el caso real —que el latido se pare— con ruido permanente.

Ahora se comprueba el efecto: el último commit de cosecha y su edad. Dispara en :00 y :30, así que
más de 40 minutos sin commitear es un latido perdido y se avisa; si no, dice «✓ al día» con la edad
exacta. El crontab se sigue mirando, pero sólo para SUMAR información cuando está, nunca para
avisar cuando falta.

Medido desde la jaula: «último ciclo: hace 18m 54s — estado: cosecha granja 2026-09-18T17:31:27Z».
This commit is contained in:
Sergio
2026-09-18 17:50:29 +00:00
parent 88f3977e2c
commit 944eb1befe
+22 -5
View File
@@ -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