feat: arranque y bootstrap multiplataforma (macOS/Linux)
- scripts/bootstrap.sh: setup idempotente (python>=3.10, venv, extras, ffmpeg/node con hints de brew/apt, config.yaml desde example) - scripts/start-server.sh / stop-server.sh: equivalentes bash de los .ps1 (reuso de servidor via .run/server.info, puerto libre 8000-8100, healthz, apertura de navegador con open/xdg-open) - Makefile: setup/serve/stop/test/clean (Windows apunta a los .bat/.ps1) - compatible con bash 3.2 de macOS, sin bashismos
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
#!/usr/bin/env bash
|
||||
# stop-server.sh — detiene el servidor web registrado en .run/server.info.
|
||||
# Espejo de scripts/stop-server.ps1 (Windows). Mensajes en espanol como el .ps1.
|
||||
#
|
||||
# Uso: bash scripts/stop-server.sh (o `make stop`)
|
||||
# Compatible con el bash 3.2 de macOS y con POSIX sh.
|
||||
|
||||
set -u
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" || exit 1
|
||||
ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" || exit 1
|
||||
cd "$ROOT" || exit 1
|
||||
|
||||
INFO_FILE=".run/server.info"
|
||||
|
||||
say() { printf '%s\n' "$*"; }
|
||||
|
||||
# --- algo sigue escuchando en el puerto? (nc, con fallback a python3) ---
|
||||
port_busy() {
|
||||
# $1 = puerto; exit 0 si hay un proceso aceptando conexiones ahi
|
||||
if command -v nc >/dev/null 2>&1; then
|
||||
nc -z 127.0.0.1 "$1" >/dev/null 2>&1
|
||||
elif command -v python3 >/dev/null 2>&1; then
|
||||
python3 - "$1" <<'PYEOF' >/dev/null 2>&1
|
||||
import socket, sys
|
||||
s = socket.socket()
|
||||
s.settimeout(1)
|
||||
try:
|
||||
s.connect(("127.0.0.1", int(sys.argv[1])))
|
||||
except OSError:
|
||||
sys.exit(1)
|
||||
PYEOF
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
say ""
|
||||
|
||||
if [ ! -f "$INFO_FILE" ]; then
|
||||
say " [yt-scraper] no hay servidor registrado; nada que detener."
|
||||
say " [ok] nada que detener."
|
||||
say ""
|
||||
exit 0
|
||||
fi
|
||||
|
||||
first_line="$(head -n 1 "$INFO_FILE" 2>/dev/null || true)"
|
||||
# primera linea: "PUERTO PID FECHA"
|
||||
set -- $first_line
|
||||
PORT="${1:-}"
|
||||
PIDV="${2:-}"
|
||||
|
||||
say " [yt-scraper] Apagando el servidor..."
|
||||
|
||||
# PID ausente, no-numerico o ya muerto -> ya estaba apagado.
|
||||
if [ -z "$PIDV" ]; then
|
||||
say " [info] El servidor ya estaba apagado."
|
||||
else
|
||||
case "$PIDV" in
|
||||
*[!0-9]* | "")
|
||||
say " [info] registro corrupto; solo limpio el archivo."
|
||||
;;
|
||||
*)
|
||||
if ! kill -0 "$PIDV" 2>/dev/null; then
|
||||
say " [info] El servidor ya estaba apagado."
|
||||
else
|
||||
# kill amable, ~4 s de gracia y luego kill -9.
|
||||
kill "$PIDV" 2>/dev/null
|
||||
i=0
|
||||
while [ "$i" -lt 10 ] && kill -0 "$PIDV" 2>/dev/null; do
|
||||
sleep 0.4
|
||||
i=$((i + 1))
|
||||
done
|
||||
if kill -0 "$PIDV" 2>/dev/null; then
|
||||
say " [kill] no cerro solo; forzando (kill -9)..."
|
||||
kill -9 "$PIDV" 2>/dev/null
|
||||
sleep 0.5
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
rm -f "$INFO_FILE"
|
||||
|
||||
if [ -n "$PORT" ] && port_busy "$PORT"; then
|
||||
say " [warn] Algo sigue ocupando el puerto $PORT. Revisa con: lsof -i :$PORT"
|
||||
else
|
||||
say " [ok] puerto liberado, servidor detenido."
|
||||
fi
|
||||
say ""
|
||||
Reference in New Issue
Block a user