50 lines
1.5 KiB
Bash
50 lines
1.5 KiB
Bash
#!/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
|