Files
dtic-DIIAA/adn/tools/bkps/cron-bkps.sh
T
Ricardo MonlaandClaude Opus 4.6 1802c25194 refactor(ambitos): Migración completa dtic-DASUTEN (A04) y dtic-BKPs (A03) + herramientas ADN
Migración dtic-DASUTEN a estándar A04:
- A04_dtic-DASUTEN.md: Manifiesto creado
- A04.P001 a A04.P005: Planes renombrados de P2601.*
- _hist/_hist_P2601_dasuten.md: Legacy archivado

Migración dtic-BKPs a estándar A03:
- A03_dtic-BKPs.md: Manifiesto creado
- A03.P001, A03.P002: Planes migrados
- docs/ambito/dtic-BKPs/: Nueva estructura

Herramientas ADN nuevas:
- adn/tools/bkps/: BKPs migrado a tools ADN
- adn/tools/cli/dron.rb: Vigía de tareas largas
- adn/tools/cli/copiloto.rb: Asistente CLI
- adn/tools/cli/novato.rb: CLI de aprendizaje

Limpieza:
- dtic-BKPs/ → _hist/dtic-BKPs/ (legacy archivado)
- adn/tools/cli/backup.rb → _hist/ (migrado a bkps.rb)

Otros:
- nodos/pcv-dasu1.md, srvv-data.md, srvv-nginx-rm.md: Actualizados
- adn/tools/core/conciliador.rb: Mejoras
- adn/tools/w-zombi/data/cmd.json: Actualizado

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 10:23:53 -03:00

88 lines
3.1 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# ==========================================================
# adn/tools/bkps/cron-bkps.sh — Wrapper cron para backups
# ----------------------------------------------------------
# Ejecuta un comando bkps con:
# - Lockfile (evita ejecuciones simultáneas)
# - Bitácora automática vía dron
# - Logging de salida
#
# Uso en crontab:
# 0 2 * * * /ruta/adn/tools/bkps/cron-bkps.sh C4
# 0 3 * * * /ruta/adn/tools/bkps/cron-bkps.sh T3
#
# Ejemplo manual:
# ./adn/tools/bkps/cron-bkps.sh C4 "Pipeline nocturno C4"
# ==========================================================
set -euo pipefail
# ─── Configuración ─────────────────────────────────────────
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
ADN_RUN="$PROJECT_ROOT/adn/tools/run"
LOCK_DIR="$PROJECT_ROOT/tmp/locks"
LOG_DIR="$PROJECT_ROOT/tmp/logs/bkps"
mkdir -p "$LOCK_DIR" "$LOG_DIR"
# ─── Argumentos ────────────────────────────────────────────
REF="${1:-}"
NOTA="${2:-Cron: bkps run $REF --batch}"
AMBITO="dtic-BKPs"
NODO="srv-ns8"
if [ -z "$REF" ]; then
echo "✗ Uso: cron-bkps.sh <T1|C1|ID> [nota]"
exit 1
fi
# ─── Lockfile ──────────────────────────────────────────────
LOCKFILE="$LOCK_DIR/bkps_${REF}.lock"
if [ -f "$LOCKFILE" ]; then
PID_LOCK=$(cat "$LOCKFILE")
if kill -0 "$PID_LOCK" 2>/dev/null; then
echo "⚠ bkps $REF ya está corriendo (PID: $PID_LOCK, lock: $LOCKFILE)"
exit 0 # No es error, simplemente ya está corriendo
else
echo " Lock stale removido (PID $PID_LOCK ya no existe)"
rm -f "$LOCKFILE"
fi
fi
echo $$ > "$LOCKFILE"
trap 'rm -f "$LOCKFILE"' EXIT
# ─── Log ───────────────────────────────────────────────────
FECHA=$(date +%Y-%m-%d)
HORA=$(date +%H:%M)
LOGFILE="$LOG_DIR/bkps_${REF}_${FECHA}_${HORA//:/}.log"
echo "[$(date)] cron-bkps: Iniciando $REF" >> "$LOGFILE"
# ─── Bitácora + Ejecución via Dron ──────────────────────
# Crear evento
EVENTO_ID=$("$ADN_RUN" db evento:crear \
--ambito "$AMBITO" \
--nodo "$NODO" \
--descripcion "$NOTA" \
--inicio "$HORA" \
--modo R --ia 2>&1 | grep -oP 'ID \K\d+' | tail -1)
if [ -z "$EVENTO_ID" ]; then
echo "[$(date)] cron-bkps: ⚠ No se pudo crear evento, ejecutando sin bitácora" >> "$LOGFILE"
"$ADN_RUN" bkps run "$REF" --batch >> "$LOGFILE" 2>&1
EXIT_CODE=$?
else
echo "[$(date)] cron-bkps: Evento #$EVENTO_ID creado, delegando al dron" >> "$LOGFILE"
"$ADN_RUN" dron lanzar \
--evento "$EVENTO_ID" \
--nota "$NOTA" \
-- "$ADN_RUN" bkps run "$REF" --batch >> "$LOGFILE" 2>&1
EXIT_CODE=$?
fi
echo "[$(date)] cron-bkps: Finalizado con código $EXIT_CODE" >> "$LOGFILE"
exit $EXIT_CODE