scrum4me-docker/bin/log-cleanup.sh
Janpeter Visser 0b5a044ea5 feat(logs): per-job log-symlink jobs/<job_id>.log -> runs/<ts>.log (IDEA-063)
Run-logs in /var/log/agent/runs/ zijn timestamp-named, dus de output van
een specifieke job was alleen via grep te vinden. De map jobs/ bestond al
maar werd niet gevuld.

- run-agent.sh: geeft het run-log-pad door als RUN_LOG env-var aan
  run-one-job.ts.
- run-one-job.ts: legt direct na de claim een symlink
  jobs/<job_id>.log -> ../runs/<ts>.log. Relatief pad (overleeft de
  host bind-mount), best-effort (faalt de job nooit over een log-gemak).
- log-cleanup.sh: ruimt dangling per-job symlinks op met `find -xtype l`
  — nodig omdat rotate-logs.sh het doel na 24u gzipt (.log -> .log.gz)
  of na 30d verwijdert, en de bestaande `-type f` cleanup symlinks niet
  raakt.

Functioneel geverifieerd: symlink resolveert, dangling-prune werkt,
`-type f` negeert de symlink (geen voortijdige delete). run-one-job.ts
parseert schoon (node --check + type-strip).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 19:22:40 +02:00

26 lines
1.1 KiB
Bash
Executable file

#!/usr/bin/env bash
# log-cleanup.sh — verwijder log-bestanden ouder dan N dagen
#
# Default 2 dagen. Override via env AGENT_LOG_HARD_DELETE_DAYS.
# Werkt op alles onder ${AGENT_LOG_DIR} (runs/, jobs/, *.log,
# health-server.log, repo-bootstrap.log).
#
# Loopt parallel aan rotate-logs.sh (compressie + 30d delete) en is
# bewust apart zodat de gzip-rotatie onafhankelijk blijft van de
# hard delete.
set -uo pipefail
: "${AGENT_LOG_DIR:=/var/log/agent}"
: "${AGENT_LOG_HARD_DELETE_DAYS:=2}"
find "${AGENT_LOG_DIR}" -type f \
\( -name '*.log' -o -name '*.log.gz' -o -name '*.txt' -o -name '*.json' \) \
-mtime "+${AGENT_LOG_HARD_DELETE_DAYS}" -delete 2>/dev/null || true
# Prune dangling per-job symlinks: jobs/<job_id>.log -> runs/<ts>.log waarvan
# het doel door rotatie is gegzipt of verwijderd. De -type f hierboven raakt
# symlinks niet, dus broken links worden hier expliciet opgeruimd (-xtype l).
find "${AGENT_LOG_DIR}/jobs" -maxdepth 1 -xtype l -delete 2>/dev/null || true
find "${AGENT_LOG_DIR}/jobs" -mindepth 1 -type d -empty -delete 2>/dev/null || true