#!/usr/bin/env bash # orchestrate-startup.sh — secuencia de arranque tras un rebote (corre en el HOST). # Lo dispara el watcher al detectar el fichero de señal 'encender'. # Orden INVERSO al apagado: primero la BD (para que esté lista antes de que # los escritores vuelvan), luego HA reenciende Shelly/nodos por su cuenta. # # NOTA: el reencendido de los Shelly (Arduinos y raspi de servicio) lo hace la # automatización de HA. Este script solo se ocupa de lo que vive en el host: # arrancar el contenedor de la base de datos y confirmar que responde. set -uo pipefail # CONFIG ---------------------------------------------------------------------- CONTAINER="mariadb" LOG="/var/log/safe-shutdown.log" # ----------------------------------------------------------------------------- log() { echo "$(date -Is) [orchestrate-startup] $*" | tee -a "$LOG"; } log "===== SECUENCIA DE ARRANQUE INICIADA =====" # ¿Ya está corriendo? (idempotente: por si la señal llega dos veces) if docker ps --format '{{.Names}}' | grep -qx "$CONTAINER"; then log "el contenedor '$CONTAINER' ya está corriendo. Nada que hacer." log "===== SECUENCIA DE ARRANQUE COMPLETADA =====" exit 0 fi # 1. Arrancar el contenedor de la BD. log "arrancando contenedor '$CONTAINER'..." if docker start "$CONTAINER" >/dev/null; then log "docker start devolvió OK" else log "ERROR: docker start falló" exit 1 fi # 2. Esperar a que MariaDB acepte conexiones (no basta con que el contenedor # esté 'Up': el servidor tarda unos segundos en estar listo). log "esperando a que MariaDB acepte conexiones..." ready=0 for i in {1..30}; do if docker exec "$CONTAINER" mariadb-admin ping --silent &>/dev/null; then ready=1 log "MariaDB responde (tras ${i}s)" break fi sleep 1 done if [[ "$ready" -eq 0 ]]; then log "ERROR: MariaDB no respondió tras 30s" exit 1 fi log "===== SECUENCIA DE ARRANQUE COMPLETADA ====="