poda-fuentes: no corría en takana — y la causa era que la caja NO TIENE /dev/fd
El latido, corrido desde la caja, moría así: poda-fuentes.sh: line 72: /dev/fd/63: No such file or directory poda-fuentes.sh: line 73: viejos: unbound variable ⚠ poda de fuentes falló (rc=1) — sigo El segundo error es consecuencia del primero (el `mapfile` nunca corrió), y el primero no nombra la causa: **la sustitución de procesos de bash necesita `/dev/fd`, y una caja takana no lo tiene**. gioser sí: `/dev/fd -> /proc/self/fd`. O sea que NINGÚN `<(...)` de NINGÚN script del hub funcionaba allá — esto era sólo el primero en toparse. Dos arreglos, y los dos hacían falta: 1. En el script: `<(...)` fuera (fichero temporal, que anda en cualquier shell y con cualquier /dev) y `df -B1 --output=avail`, que es GNU, por `df -k` + awk. Es la poda de `work/sources`, justo lo que un hub necesita para no llenarse. 2. En la caja: `/dev/fd -> /proc/self/fd`, con una Card OneShot en el genesis para que sobreviva al reinicio (como la de `hostname`). Comprobado después: `bash -c "cat <(echo funciona)"` responde. Lo correcto a futuro es que lo haga el init o el product-rootfs, no una Card — queda anotado. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+13
-3
@@ -68,8 +68,18 @@ MINUTOS=$((HORAS * 60))
|
||||
|
||||
poda() {
|
||||
local libre_antes libre_despues n
|
||||
libre_antes=$(df -B1 --output=avail "$FUENTES" | tail -1)
|
||||
mapfile -t viejos < <(find "$FUENTES" -mindepth 1 -maxdepth 1 -type d -mmin "+$MINUTOS" | sort)
|
||||
# ⚠ `df -B1 --output=avail` es GNU y **busybox no lo tiene** (medido en la caja takana el
|
||||
# 2026-09-17). `df -k` + awk da los mismos bytes y anda en los dos mundos.
|
||||
libre_antes=$(df -k "$FUENTES" | tail -1 | awk '{print $4*1024}')
|
||||
# ⚠ NADA DE `<(...)` ACÁ. La sustitución de procesos de bash necesita `/dev/fd`, y una caja
|
||||
# takana **no lo tiene** (gioser sí: `/dev/fd -> /proc/self/fd`). El síntoma no nombra la causa:
|
||||
# `line 72: /dev/fd/63: No such file or directory` y después `viejos: unbound variable`, porque el
|
||||
# `mapfile` nunca corrió. Un fichero temporal anda en cualquier shell y en cualquier /dev.
|
||||
local lista; lista=$(mktemp)
|
||||
find "$FUENTES" -mindepth 1 -maxdepth 1 -type d -mmin "+$MINUTOS" | sort > "$lista"
|
||||
viejos=()
|
||||
while IFS= read -r _l; do [ -n "$_l" ] && viejos+=("$_l"); done < "$lista"
|
||||
rm -f "$lista"
|
||||
n=${#viejos[@]}
|
||||
local quedan
|
||||
quedan=$(find "$FUENTES" -mindepth 1 -maxdepth 1 -type d -not -mmin "+$MINUTOS" | wc -l)
|
||||
@@ -89,7 +99,7 @@ poda() {
|
||||
fi
|
||||
|
||||
printf '%s\0' "${viejos[@]}" | xargs -0 -r rm -rf
|
||||
libre_despues=$(df -B1 --output=avail "$FUENTES" | tail -1)
|
||||
libre_despues=$(df -k "$FUENTES" | tail -1 | awk '{print $4*1024}')
|
||||
echo " borrados $n · libres $(gigas "$libre_despues") G · LIBERADO $(gigas $((libre_despues - libre_antes))) G"
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user