granja: el worker es el LXC PRESTADO (€0) — que no se vuelva a perder
El dato ya estaba en memoria y aun así se perdió dos veces, así que ahora vive en los sitios que se leen sin buscarlos: regla 1 bis de CLAUDE.md (que carga todo agente en cada sesión) y la skill 'granja' del repo. Se compila en dev.gioser.net PARA NO GASTAR HETZNER; no se levantan cajas hcloud salvo petición explícita. Y se arregla la fragilidad que salió al mirar: el reaper de cosecha-cron expulsa de .fleet todo lo que no esté en hcloud, y el LXC se salvaba SÓLO porque su nombre contiene la subcadena 'gioser' y caía en una lista negra que existe para proteger al hub de Hetzner — no tiene nada que ver con él. Medido con el bloque real del reaper contra un .fleet de juguete: nombre CON 'gioser' → 'en LISTA NEGRA ⇒ intocable' sobrevive el MISMO host como 'pruebasia-lxc' → 'ya no existe en hcloud' .fleet VACÍO O sea que la granja se mantenía conectada por una casualidad de nombre, y con otro nombre volvía a 'flota vacía' en el primer ciclo sin que nada fallara. Ahora el reaper pregunta por SSH si el host responde, que es preguntarle a la máquina en vez de al nombre. Verificado en las dos direcciones, con control: host vivo, nombre sin 'gioser' → 'no es de hcloud pero RESPONDE ⇒ se queda (€0)' host que no responde → 'no responde ⇒ lo saco de .fleet' (intención original) Queda anotado también que .fleet está gitignored: un hub recién clonado nace con la flota vacía y la granja queda desconectada en silencio — la cosecha dice 'flota vacía', los artefactos no vuelven, y estado-granja.sh reporta 'no hay worker vivo' con el worker compilando. Es como se descubrió esto hoy. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014QPJteswQvP1L7zSBrQQe2
This commit is contained in:
@@ -164,7 +164,24 @@ if [ -s "$FLEET" ] && command -v hcloud >/dev/null 2>&1; then
|
||||
# ¿el server siquiera existe? Si ya no está en hcloud (borrado a mano o por un ciclo previo),
|
||||
# NO cuesta € y no debe quedar en .fleet para siempre. Se dropea (no entra a `sobreviven`).
|
||||
if ! hcloud server describe "$name" -o format='{{.Name}}' >/dev/null 2>&1; then
|
||||
echo "==> reaper: $name ya no existe en hcloud ⇒ lo saco de .fleet"; rm -f "$strike_f"; continue
|
||||
# ⚠ «No está en hcloud» son DOS casos muy distintos, y antes se trataban igual (2026-09-08):
|
||||
# · un worker PERMANENTE que no es de Hetzner — hoy el LXC prestado `dev.gioser.net`, que
|
||||
# no cuesta € ⇒ NO HAY NADA QUE SEGAR, y sacarlo de .fleet desconecta la granja EN
|
||||
# SILENCIO: la cosecha pasa a decir «flota vacía» y los artefactos del worker dejan de
|
||||
# volver, sin que nada falle. Es el mismo fallo mudo que este fichero ya tuvo.
|
||||
# · un server efímero ya borrado a mano ⇒ ése sí sobra en .fleet para siempre.
|
||||
# Se distinguen preguntándole a la MÁQUINA, no al nombre. Antes el LXC sólo se salvaba porque
|
||||
# su nombre contiene la subcadena «gioser» y caía en la lista negra de arriba — una lista que
|
||||
# existe para proteger al HUB de Hetzner y no tiene nada que ver con él. Medido: el mismo host
|
||||
# llamado `pruebasia-lxc` era expulsado de .fleet en el primer ciclo.
|
||||
if $SSH root@"$ip" true 2>/dev/null; then
|
||||
echo "==> reaper: $name no es de hcloud pero RESPONDE ⇒ worker permanente, se queda (€0)"
|
||||
sobreviven="${sobreviven}${name} ${ip}
|
||||
"
|
||||
else
|
||||
echo "==> reaper: $name no está en hcloud y no responde ⇒ lo saco de .fleet"; rm -f "$strike_f"
|
||||
fi
|
||||
continue
|
||||
fi
|
||||
if $SSH root@"$ip" 'pgrep -f "hammer build|campana-deuda|farm-worker-loop" >/dev/null 2>&1'; then
|
||||
echo 0 > "$strike_f"; sobreviven="${sobreviven}${name} ${ip}
|
||||
|
||||
Reference in New Issue
Block a user