release v1.0
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
#!/usr/bin/env bash
|
||||
# total-shutdown.sh — FASE 2: apagado TOTAL de la raspi principal.
|
||||
# Corre en el HOST. Cierra BD + HA y finalmente apaga la propia máquina.
|
||||
#
|
||||
# ATENCIÓN: la última acción es 'poweroff'. Tras ejecutarse, la raspi se apaga.
|
||||
# Solo volverá a encenderse cuando reciba de nuevo alimentación (corte físico +
|
||||
# retorno de tensión). Si la apagas con corriente aún disponible, NO arrancará
|
||||
# sola: requerirá corte/retorno de alimentación o encendido manual.
|
||||
#
|
||||
# Este script asume que la FASE 1 (Arduinos + raspi de servicio) ya se ejecutó.
|
||||
# Pensado para dispararse solo cuando el SoC cruza el segundo umbral (más bajo)
|
||||
# y la red sigue sin volver.
|
||||
|
||||
set -uo pipefail
|
||||
|
||||
# CONFIG ----------------------------------------------------------------------
|
||||
DB_CONTAINER="mariadb"
|
||||
HA_CONTAINER="homeassistant"
|
||||
APAGADO_NODOS="/usr/local/sbin/service-nodes-shutdown.sh"
|
||||
APAGADO_BDD="/usr/local/sbin/mariadb-shutdown.sh"
|
||||
LOG="/var/log/safe-shutdown.log"
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
log() { echo "$(date -Is) [full-shutdown] $*" | tee -a "$LOG"; }
|
||||
|
||||
log "===== FASE 2: APAGADO TOTAL INICIADO ====="
|
||||
# 1. Comprobar que los nodos de servicio estan apagados
|
||||
log "paso 1: asegurando el apagado de nodos de servicio..."
|
||||
if "$apagado_nodos"; then
|
||||
log "paso 1: OK, todos los nodos apagados"
|
||||
else
|
||||
log "paso 1: ERROR, el script de apagado de nodos fallo"
|
||||
fi
|
||||
|
||||
# 2. Cerrar la BD limpiamente (si sigue corriendo). Reutiliza el script probado.
|
||||
if docker ps --format '{{.Names}}' | grep -qx "$DB_CONTAINER"; then
|
||||
log "paso 2: la BD sigue corriendo, cerrándola..."
|
||||
if "$APAGADO_BDD"; then
|
||||
log "paso 2 OK"
|
||||
else
|
||||
log "paso 2: AVISO, el cierre de BD devolvió error (continuamos igualmente)"
|
||||
fi
|
||||
else
|
||||
log "paso 2: la BD ya estaba parada (cerrada en fase 1). Saltando."
|
||||
fi
|
||||
|
||||
# 3. Parar Home Assistant limpiamente.
|
||||
if docker ps --format '{{.Names}}' | grep -qx "$HA_CONTAINER"; then
|
||||
log "paso 3: parando Home Assistant..."
|
||||
if docker stop -t 30 "$HA_CONTAINER" >/dev/null; then
|
||||
log "paso 3 OK"
|
||||
else
|
||||
log "paso 3: AVISO, docker stop de HA devolvió error (continuamos)"
|
||||
fi
|
||||
else
|
||||
log "paso 3: Home Assistant no estaba corriendo. Saltando."
|
||||
fi
|
||||
|
||||
# 4. Forzar que todo baje a disco antes de cortar.
|
||||
log "paso 4: sincronizando discos (sync)..."
|
||||
sync
|
||||
sleep 2
|
||||
sync
|
||||
log "paso 4 OK"
|
||||
|
||||
# 5. Apagar la propia máquina. ESTA ES LA ÚLTIMA LÍNEA QUE SE EJECUTA.
|
||||
log "paso 5: apagando la raspi principal. Hasta luego."
|
||||
log "===== FASE 2: APAGADO TOTAL COMPLETADO (poweroff a continuación) ====="
|
||||
sync
|
||||
systemctl poweroff
|
||||
Reference in New Issue
Block a user