From a2717e922abee1f7bffbfa05490f6936c7fd137e Mon Sep 17 00:00:00 2001 From: Cristian Felipe Cruz Buitron Date: Wed, 26 Aug 2026 00:25:45 -0500 Subject: [PATCH] =?UTF-8?q?Activar=20timer:=20fix=20HOME=3D=20en=20la=20un?= =?UTF-8?q?idad,=20instrucciones=20de=20instalaci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit El manager de systemd --user de devops arranca con HOME=/DATA (el de /etc/passwd), no /DATA/AppData/home-devops -- ese override solo se aplica en una shell interactiva vía /etc/profile.d/zz-devops-home.sh, que el manager de systemd nunca carga. Sin Environment=HOME=... en lab-agent.service, claude -p habría buscado las credenciales en /DATA/.claude/ (no existe) y fallado en cada corrida. Detectado y corregido en vivo corriendo el servicio manualmente vía systemctl --user start antes de habilitar el timer. README documenta la instalación real: unidades en /DATA/.config/systemd/user/ (no ~/.config/... de una shell interactiva), loginctl enable-linger devops como único paso con sudo. Timer activo desde 2026-08-26 (lab-agent.timer, cada 15 min, 06:00-23:00 hora local), tras confirmación explícita y ver el costo mensual estimado. --- lab-agent/README.md | 44 ++++++++++++++++++++++------- lab-agent/systemd/lab-agent.service | 7 +++++ 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/lab-agent/README.md b/lab-agent/README.md index 4830c0c..64b23a0 100644 --- a/lab-agent/README.md +++ b/lab-agent/README.md @@ -7,11 +7,13 @@ acción correctiva de bajo riesgo. Ver la lista blanca completa, la justificación de gobernanza y la evidencia de la prueba end-to-end en `apps-registry` → `docs/arquitectura/agente-monitoreo.md`. -**Estado (2026-08-26): script y prueba end-to-end validados en vivo** -contra el cluster real (deployment canario desechable, ciclo completo -DRY_RUN → ejecución real → rate limit/bloqueo → limpieza). El timer de -systemd (Paso 4) **todavía no está activo** — pendiente de tu -confirmación explícita. +**Estado (2026-08-26): timer de systemd ACTIVO** (`lab-agent.timer`, +usuario `devops`, cada 15 min entre 06:00–23:00 hora local). Validado +en vivo contra el cluster real: DRY_RUN → ejecución real → rate +limit/bloqueo → recuperación con hilo en Telegram → limpieza, y +corrida manual vía `systemctl --user start` con el entorno real del +timer antes de habilitarlo. Ver `docs/arquitectura/agente-monitoreo.md` +para la evidencia completa y el costo mensual estimado. ## Diseño de seguridad (por qué Claude no ejecuta comandos directamente) @@ -156,9 +158,31 @@ ejecuta de verdad (confirmado con `kubectl get events` y la anotación `restartedAt`), y una segunda corrida sobre el mismo recurso caído respeta el bloqueo (`notify_only`, sin reintento). Dos bugs reales se encontraron y corrigieron en esa prueba — ver el detalle en -`docs/arquitectura/agente-monitoreo.md`. La notificación real se -validó con ntfy.sh en esa prueba; el cambio a Telegram debe repetir -al menos la validación de entrega antes de habilitar el timer. +`docs/arquitectura/agente-monitoreo.md`. Telegram (silencioso para +`info`, hilo de respuestas al recuperarse) también se validó en vivo +con el mismo canario. -**No actives el timer de systemd todavía** — requiere tu confirmación -explícita por separado, después de ver el costo mensual estimado. +## Instalar el timer de systemd + +Unidades de **usuario** (`systemctl --user`), corren como `devops` — +necesario porque `claude -p` usa su login de suscripción. Ojo: el +manager de `systemd --user` de `devops` arranca con `HOME=/DATA` (el +de `/etc/passwd`), no `/DATA/AppData/home-devops` — por eso +`lab-agent.service` fija `Environment=HOME=...` explícitamente; sin +eso, `claude -p` no encuentra las credenciales. Los archivos van en +`/DATA/.config/systemd/user/`, no en el `~/.config/...` de una shell +interactiva (que resuelve a otra ruta por el mismo motivo). + +```bash +mkdir -p /DATA/.config/systemd/user +cp systemd/lab-agent.service systemd/lab-agent.timer /DATA/.config/systemd/user/ +sudo loginctl enable-linger devops # una vez — si no, systemctl --user ni conecta +export XDG_RUNTIME_DIR=/run/user/$(id -u devops) +systemctl --user daemon-reload +systemctl --user start lab-agent.service # probar una corrida manual primero +systemctl --user enable --now lab-agent.timer +systemctl --user list-timers lab-agent.timer +``` + +Activo desde 2026-08-26. Ver el costo mensual estimado y el detalle +completo en `docs/arquitectura/agente-monitoreo.md`. diff --git a/lab-agent/systemd/lab-agent.service b/lab-agent/systemd/lab-agent.service index cacd8b7..9c906bb 100644 --- a/lab-agent/systemd/lab-agent.service +++ b/lab-agent/systemd/lab-agent.service @@ -6,6 +6,13 @@ Wants=network-online.target [Service] Type=oneshot WorkingDirectory=/media/HDD-Storage/AppData/k3d-lab-v3/lab-cruzcloud/scripts/lab-agent +# El manager de systemd --user de devops arranca con HOME=/DATA (el de +# /etc/passwd), no /DATA/AppData/home-devops -- ese override solo se +# aplica al abrir una shell interactiva via /etc/profile.d/zz-devops-home.sh, +# que el manager de systemd nunca carga. Sin esto, claude -p buscaria +# ~/.claude/.credentials.json en /DATA/.claude/ (no existe) y fallaria +# la autenticacion. Confirmado en vivo 2026-08-26. +Environment=HOME=/DATA/AppData/home-devops ExecStart=/media/HDD-Storage/AppData/k3d-lab-v3/lab-cruzcloud/scripts/lab-agent/lab-agent.sh --live TimeoutStartSec=300