feat: add service manager script

**Motivations :**
- provide consistent lifecycle commands for the frontend and relay
- avoid port ambiguities when launching local services

**Modifications :**
- replace start-dev.sh with a start/stop/restart/status manager for ihm_client and sdk_relay
- enforce ports 3004 and 8091 with pid tracking and logging per service

**Page affectées :**
- start-dev.sh
This commit is contained in:
NicolasCantu 2025-10-31 14:13:51 +01:00
parent 76556e1f6e
commit ff94b1ec21

View File

@ -1,7 +1,188 @@
#!/bin/sh
#!/usr/bin/env bash
# Démarrer nginx en arrière-plan
nginx
set -euo pipefail
# Démarrer le serveur de développement Vite
npm run start
ROOT_DIR="/home/ank/dev/ihm_client_dev3"
LOG_DIR="${ROOT_DIR}/logs"
FRONT_PORT=3004
FRONT_PID_FILE="${LOG_DIR}/ihm_client_dev3.front.pid"
FRONT_LOG_FILE="${LOG_DIR}/ihm_client_dev3.front.log"
RELAY_PORT=8091
RELAY_DIR="${ROOT_DIR}/sdk_relay"
RELAY_BIN="${RELAY_DIR}/target/release/sdk_relay"
RELAY_PID_FILE="${LOG_DIR}/sdk_relay.pid"
RELAY_LOG_FILE="${LOG_DIR}/sdk_relay.log"
mkdir -p "${LOG_DIR}"
is_running() {
local pid="$1"
if [ -n "${pid}" ] && kill -0 "${pid}" 2>/dev/null; then
return 0
fi
return 1
}
stop_pid_file() {
local pid_file="$1"
if [ -f "${pid_file}" ]; then
local pid
pid="$(cat "${pid_file}" 2>/dev/null || true)"
if is_running "${pid}"; then
kill -TERM "${pid}" 2>/dev/null || true
sleep 2
if is_running "${pid}"; then
kill -KILL "${pid}" 2>/dev/null || true
fi
fi
rm -f "${pid_file}"
fi
}
stop_port() {
local port="$1"
if command -v lsof >/dev/null 2>&1; then
local pids
pids="$(lsof -t -i ":${port}" 2>/dev/null || true)"
if [ -n "${pids}" ]; then
echo "[stop] Killing processes on port ${port}: ${pids}"
kill -TERM ${pids} 2>/dev/null || true
sleep 2
kill -KILL ${pids} 2>/dev/null || true
fi
fi
}
start_front() {
stop_front >/dev/null 2>&1 || true
stop_port "${FRONT_PORT}" || true
echo "[start] Launching ihm_client on port ${FRONT_PORT}"
(
cd "${ROOT_DIR}"
npm run start -- --host 0.0.0.0 --port "${FRONT_PORT}" > "${FRONT_LOG_FILE}" 2>&1 &
echo $! > "${FRONT_PID_FILE}"
)
echo "[start] ihm_client PID $(cat "${FRONT_PID_FILE}")"
}
start_relay() {
stop_relay >/dev/null 2>&1 || true
stop_port "${RELAY_PORT}" || true
if [ ! -x "${RELAY_BIN}" ]; then
echo "[build] Compiling sdk_relay (release)..."
(
cd "${RELAY_DIR}"
cargo build --release
)
fi
echo "[start] Launching sdk_relay on port ${RELAY_PORT}"
(
cd "${RELAY_DIR}"
RUST_LOG=info "${RELAY_BIN}" > "${RELAY_LOG_FILE}" 2>&1 &
echo $! > "${RELAY_PID_FILE}"
)
echo "[start] sdk_relay PID $(cat "${RELAY_PID_FILE}")"
}
stop_front() {
stop_pid_file "${FRONT_PID_FILE}"
stop_port "${FRONT_PORT}" || true
echo "[stop] ihm_client stopped"
}
stop_relay() {
stop_pid_file "${RELAY_PID_FILE}"
stop_port "${RELAY_PORT}" || true
echo "[stop] sdk_relay stopped"
}
status_service() {
local name="$1"
local pid_file="$2"
local port="$3"
local state="stopped"
if [ -f "${pid_file}" ]; then
local pid
pid="$(cat "${pid_file}" 2>/dev/null || true)"
if is_running "${pid}"; then
state="running (pid ${pid})"
fi
fi
local port_state="free"
if command -v lsof >/dev/null 2>&1; then
if lsof -t -i ":${port}" >/dev/null 2>&1; then
port_state="in use"
fi
fi
echo "${name}: ${state}, port ${port} ${port_state}"
}
command_all() {
local action="$1"
case "${action}" in
start)
start_relay
start_front
;;
stop)
stop_front
stop_relay
;;
restart)
command_all stop
command_all start
;;
status)
status_service "sdk_relay" "${RELAY_PID_FILE}" "${RELAY_PORT}"
status_service "ihm_client" "${FRONT_PID_FILE}" "${FRONT_PORT}"
;;
*)
echo "Unknown action: ${action}" >&2
exit 1
;;
esac
}
if [ "$#" -lt 1 ]; then
echo "Usage: $0 {start|stop|restart|status} [front|relay|all]" >&2
exit 1
fi
ACTION="$1"
TARGET="${2:-all}"
case "${TARGET}" in
front)
case "${ACTION}" in
start) start_front ;;
stop) stop_front ;;
restart) stop_front; start_front ;;
status) status_service "ihm_client" "${FRONT_PID_FILE}" "${FRONT_PORT}" ;;
*) echo "Unknown action: ${ACTION}" >&2; exit 1 ;;
esac
;;
relay)
case "${ACTION}" in
start) start_relay ;;
stop) stop_relay ;;
restart) stop_relay; start_relay ;;
status) status_service "sdk_relay" "${RELAY_PID_FILE}" "${RELAY_PORT}" ;;
*) echo "Unknown action: ${ACTION}" >&2; exit 1 ;;
esac
;;
all)
command_all "${ACTION}"
;;
*)
echo "Unknown target: ${TARGET}" >&2
exit 1
;;
esac