diff --git a/scripts/farm/farm-up.sh b/scripts/farm/farm-up.sh index 858b41a4..6b336b2a 100755 --- a/scripts/farm/farm-up.sh +++ b/scripts/farm/farm-up.sh @@ -84,12 +84,27 @@ for k in $(seq 1 "$N"); do # «lo puse allí, di el bucle por cerrado, y la churn siguió porque hay DOS rutas». Había dos rutas # otra vez —`farm-sync` y `farm-up`— y sólo una estaba arreglada. Si aparece una tercera, va con # el mismo include. + # ⚠ `--exclude /work` NO excluía el contenido, sólo la entrada. Con `--include '/work/'` delante, + # rsync entraba al directorio y sus hijos no casaban con ninguna regla ⇒ **se copiaba `work/` + # entero**. Medido el 2026-08-11 montando el primer worker con el lab anclado: llegaron 3,7 G de + # `work/`, incluidos los mirrors de git A MEDIO COPIAR (el rsync abortó antes de terminarlos), y + # el worker fallaba cada receta con `git fetch … exit 128`. Encima, con `--delete`, moría con + # «cannot delete non-empty directory» sobre los `vendor/` de cargo, que quedan de SÓLO LECTURA. + # `/work/**` sí ancla el contenido. Un `work/` a medias es peor que ninguno: parece que está. + set +e rsync -az --delete -e "$SSH" \ - --include '/work/' --include '/work/farm-sellados.txt' \ - --exclude /work --exclude /store --exclude '/store-*' --exclude /target \ + --include '/work/' --include '/work/farm-sellados.txt' --exclude '/work/**' \ + --exclude /store --exclude '/store-*' --exclude /target \ --exclude /dist --exclude /.dev-fs --exclude /.git --exclude /.scratch \ --exclude '*.png' --exclude '/content*' \ ./ "root@$ip:$REMOTE/" + rc=$? + set -e + # NO abortamos si el rsync falla. Lo que viene después es el ARMADO DEL DEAD-MAN, y un `set -e` + # aquí dejaba un server VIVO SIN poder autodestruirse — que es justo lo que este script declara + # inadmisible. El orden ideal sería armar el dead-man ANTES de cualquier paso que pueda fallar; + # mientras eso no se reordene, esto garantiza al menos que se llegue a armarlo. + [ "$rc" -ne 0 ] && echo " ⚠ rsync de código salió $rc — el worker puede tener la cola incompleta; sigo para ARMAR EL DEAD-MAN" # el servicio ya arrancó en el boot (baked/enabled); reiniciar fuerza rescan inmediato de la cola $SSH root@"$ip" 'systemctl restart hammer-farm' 2>/dev/null || true