#!/usr/bin/env bash # ============================================================ # entrypoint.sh - Avvia sia il web server che lo script di sync # ============================================================ # Gestisce i due processi: # 1. Flask web dashboard (background) # 2. Script di sincronizzazione rclone (foreground) # # Lo shutdown pulito viene propagato a entrambi i processi. # ============================================================ set -euo pipefail # --- Crea directory condivise --- mkdir -p /data/state /data/local # --- Porta web (configurabile) --- WEB_PORT="${WEB_PORT:-8080}" echo "[ENTRYPOINT] Avvio dashboard web su porta ${WEB_PORT}..." # Avvia il web server Flask in background # - Usa python3 -u per output unbuffered (log immediati) python3 -u /app/web/app.py & WEB_PID=$! echo "[ENTRYPOINT] Dashboard avviata (PID: ${WEB_PID})" echo "[ENTRYPOINT] Avvio sincronizzazione..." # --- Gestione shutdown: termina entrambi i processi --- cleanup() { echo "[ENTRYPOINT] Arresto in corso..." # Invia SIGTERM al web server kill "${WEB_PID}" 2>/dev/null || true wait "${WEB_PID}" 2>/dev/null || true echo "[ENTRYPOINT] Arresto completato." } trap cleanup SIGTERM SIGINT # Avvia lo script di sync in foreground # Questo è il processo principale: se termina, il container si ferma /usr/local/bin/sync.sh & SYNC_PID=$! # Attendi che uno dei due processi termini wait -n "${WEB_PID}" "${SYNC_PID}" 2>/dev/null || true # Se siamo qui, un processo è terminato: ferma l'altro cleanup