#!/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