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:
parent
76556e1f6e
commit
ff94b1ec21
191
start-dev.sh
191
start-dev.sh
@ -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
|
||||
Loading…
x
Reference in New Issue
Block a user