release v1.0

This commit is contained in:
2026-07-21 12:37:30 +02:00
parent 2d2cdfad3b
commit 59541b7954
19 changed files with 1245 additions and 2 deletions
+58
View File
@@ -0,0 +1,58 @@
#!/usr/bin/env bash
# service-nodes-shutdown.sh - Apagado de la(s) raspi(s) de servicio por SSH de
# forma segura. Se ejecuta en la raspi principal. Ordena el poweroff y espera
# a que deje de hacer ping antes de continuar. Despues corta la alimentacion
# fisica a traves del relé correspondiente.
# REQUISITOS:
# - Claves SSH sin passphrase en /root/.ssh/id_shutdown autorizada en cada nodo
# - Regla sudoers NOPASSWD para /usr/sbin/poweroff en cada nodo
set -uo pipefail
# CONFIGURACION ---------------------------------------------------------------
NODES=(
"pi@192.168.1.219|sudo /usr/sbin/poweroff" # Raspi Dinamica
"root@192.168.1.50|/sbin/poweroff" # NVR
)
SSH_KEY="/root/.ssh/id_shutdown"
POWEROFF_CMD="sudo /usr/sbin/poweroff"
TIMEOUT_HALT=60 # Timeout para el apagado
LOG="/var/log/safe-shutdown.log"
SSH_OPTS="-i $SSH_KEY -o BatchMode=yes -o ConnectTimeout=5 -o StrictHostKeyChecking=accept-new"
# -----------------------------------------------------------------------------
log() { echo "$(date -Is) [service-nodes-shutdown] $*" | tee -a "$LOG"; }
log "inicio (${#NODES[@]} nodo/s)"
for entry in "${NODES[@]}"; do
host_user="${entry%%|*}"
host="${host_user#*@}" # extrae la IP/host del NODE
cmd="${entry#*|}"
log "apagando $host_user ..."
# Ordenar poweroff por ssh
if ssh $SSH_OPTS "$host_user" "$cmd"; then
log "$entry: orden de poweroff enviada"
else # Si falla avisamos y seguimos (puede no ser un error real)
log "$entry: AVISO, el SSH devolvio error"
fi
# Esperamos la NO respuesta de ping
halted=0
for ((i=1; i<TIMEOUT_HALT; i++)); do
if ! ping -c1 -W1 "$host" &>/dev/null; then
log "$host: apagado confirmado (dejo de responder tras ${i}s)"
halted=1
break
fi
sleep 1
done
if [[ "$halted" -eq 0 ]]; then
log "$host: AVISO, sigue respondiendo tras ${TIMEOUT_HALT}s (apagado no confirmado)"
fi
done
log "fin"